代码之家  ›  专栏  ›  技术社区  ›  Marcin

高效地转换为model.fit

  •  0
  • Marcin  · 技术社区  · 5 年前

    我很难高效地将数据加载到model.fit中。我的代码创建 training_data 对象与 samples values .Samples是一个标准的python对象列表 tf.Tensor 类。值是一个整数列表。

    跑步时

    model.fit(training_data.samples, training_data.values, epochs=10)

    我遇到了一个错误

    ValueError: Failed to find data adapter that can handle input: (<class 'list'> containing values of types {"<class 'tensorflow.python.framework.ops.EagerTensor'>"}), (<class 'list'> containing values of types {"<class 'int'>"})

    我可以通过将其全部预转换为numpy数组来完成这两项工作,如下所示:

    s, v = np.asarray(training_data.samples), np.asarray(training_data.values)
    model.fit(s, v, epochs=10)
    

    然而,这太慢了。加载数据和非常繁重的预处理(信号分块、fft等)大约需要一分钟,然后只有1800个样本的数据转换——这部分会挂起一个小时,在实际学习开始之前,我会失去耐心。张量的形状是(94257),所以没什么大不了的。

    既然我已经在内存中保存了数据,那么将数据传递给model.fit的有效方法是什么。

    1 回复  |  直到 5 年前
        1
  •  0
  •   Edwin Cheong    5 年前

    嗨,这只是一个建议,但请尝试使用tf.keras.utils中的生成器对象。序列,但这也取决于你使用的数据类型?

    您可以在此处查看示例: https://stanford.edu/~shervine/blog/keras-how-to-generate-data-on-the-fly

    我在这里实现了自己的,你可以看看: https://github.com/edwin-19/custom_keras_generator/blob/master/notebooks/Model%20Comparison.ipynb

        2
  •  0
  •   Davide    4 年前

    对我来说,当我使用错误的输入格式时(通常是在传递列表时),这是一个常见的错误。

    尝试仅将training_data.values转换为numpy数组或张量(如果是列表)。

    正如文档中所指出的(x,y,validation_data,..)具有有限数量的可接受输入,即numpy数组和张量: model.fit