【问题标题】:How to load big dataset from CSV into keras如何将大数据集从 CSV 加载到 keras
【发布时间】:2019-07-24 19:34:40
【问题描述】:

我正在尝试将 Keras 与 TensorFlow 结合使用,根据我从几张图像中获得的 SURF 特征来训练一个网络。我将所有这些功能存储在一个包含以下列的 CSV 文件中:

 [ID, Code, PointX, PointY, Desc1, ..., Desc64]

“ID”列是我存储所有值时由 pandas 创建的自动增量索引。 “代码”列是点的标签,这只是我通过将实际代码(它是一个字符串)与一个数字配对得到的一个数字。 “PointX/Y”是在给定类的图像中找到的点的坐标,“Desc#”是该点对应描述符的浮点值。

CSV 文件包含在所有 20.000 张图像中找到的所有关键点和描述符。这使我的磁盘总大小接近 60GB,我显然无法放入内存中。

我一直在尝试使用 pandas 批量加载文件,然后将所有值放入一个 numpy 数组中,然后拟合我的模型(只有 3 层的顺序模型)。为此,我使用了以下代码:

chunksize = 10 ** 6
for chunk in pd.read_csv("surf_kps.csv", chunksize=chunksize):
    dataset_chunk = chunk.to_numpy(dtype=np.float32, copy=False)
    print(dataset_chunk)
    # Divide dataset in data and labels
    X = dataset_chunk[:,9:]
    Y = dataset_chunk[:,1]
    # Train model
    model.fit(x=X,y=Y,batch_size=200,epochs=20)
    # Evaluate model
    scores = model.evaluate(X, Y)
    print("\n%s: %.2f%%" % (model.metrics_names[1], scores[1]*100))

第一个块加载没问题,但是当循环得到另一个块时,准确性和损失停留在 0。

我尝试加载所有这些信息的方式有误吗?

提前致谢!

----- 编辑 ------

好的,现在我制作了一个像这样的简单生成器:

def read_csv(filename):
    with open(filename, 'r') as f:
        for line in f.readlines():
            record = line.rstrip().split(',')
            features = [np.float32(n) for n in record[9:73]]
            label = int(record[1])
            print("features: ",type(features[0]), " ", type(label))
            yield np.array(features), label

并与它一起使用 fit_generator:

tf_ds = read_csv("mini_surf_kps.csv")
model.fit_generator(tf_ds,steps_per_epoch=1000,epochs=20)

我不知道为什么,但在第一个 epoch 开始之前我一直收到错误消息:

ValueError: Error when checking input: expected dense_input to have shape (64,) but got array with shape (1,)

模型的第一层有input_dim=64,产生的特征数组的形状也是64。

【问题讨论】:

    标签: python tensorflow keras neural-network surf


    【解决方案1】:

    【讨论】:

      【解决方案2】:

      如果您使用的是 Tf 2.0,您可以验证数据集的内容是否正确。 你可以简单地这样做,

      print(next(iter(tf_ds)))
      

      查看数据集的第一个元素并检查它是否与模型预期的输入相匹配。

      【讨论】:

      • 太好了,我发现我正在向网络提供转置数组,这就是我失败的地方。谢谢!
      猜你喜欢
      • 2017-07-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-07-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多