【问题标题】:efficiently converting for model.fit有效地转换为 model.fit
【发布时间】:2020-11-06 16:21:37
【问题描述】:

我正在努力将数据有效地加载到 model.fit 中。我的代码使用samplesvalues 创建training_data 对象。 Samples 是tf.Tensor 类对象的标准python 列表。 Values 是一个整数列表。

运行时

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 个样本的数据转换这部分就挂了一个小时,在实际学习开始之前我失去了耐心。张量的形状是 (94, 257) 所以没什么大不了的。

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

【问题讨论】:

    标签: python numpy tensorflow tensorflow2.0


    【解决方案1】:

    您好,这只是一个建议,但请尝试使用来自 tf.keras.utils.Sequence 的生成器对象,但这也取决于您使用的数据类型?

    您可以在此处查看示例: 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】:

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

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

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

      【讨论】:

        猜你喜欢
        • 2020-06-20
        • 1970-01-01
        • 2014-08-15
        • 2011-06-11
        • 2022-10-21
        • 2017-09-27
        • 2016-05-17
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多