【发布时间】:2020-01-18 22:47:43
【问题描述】:
我正在尝试使用 Tensorflow (v2.0) 的数据集 API 将大量数据传递给 tf.keras.model。这是我的数据集的简化版本:
for rec in my_dataset:
print(repr(rec))
$ {'feature0': <tf.Tensor: id=528, shape=(), dtype=float32, numpy=0.2963>,
'feature1': <tf.Tensor: id=618, shape=(), dtype=int64, numpy=0>,
'feature2': <tf.Tensor: id=620, shape=(), dtype=string, numpy=b'Inst1'>,
'target': <tf.Tensor: id=621, shape=(), dtype=int64, numpy=2>}
{'feature0': <tf.Tensor: id=528, shape=(), dtype=float32, numpy=0.4633>,
'feature1': <tf.Tensor: id=618, shape=(), dtype=int64, numpy=1>,
'feature2': <tf.Tensor: id=620, shape=(), dtype=string, numpy=b'Inst4'>,
'target': <tf.Tensor: id=621, shape=(), dtype=int64, numpy=0>}
...等等。 my_dataset 对象中的每条记录都是一个字典,其中特征(和目标)名称作为键,关联的张量作为值。我从几个 .tfrecord 文件中创建了数据集,因此在每个张量对应一个 tf.train.Example(包装器)对象的意义上,我受到了限制。数据集与 tensorflow 文档中的格式完全匹配(例如,参见 https://www.tensorflow.org/tutorials/load_data/tfrecord#reading_a_tfrecord_file 中的最后一个代码示例)。
我想将此数据集与 keras 一起使用。我正在使用的tf.keras.model 对象似乎都因为它们的fit 函数而将表示特征向量(X)和目标(y)的元组作为输入。我想我可以弄清楚如何将张量从我的数据集中转换为 numpy 数组并以这种方式将它们传递给模型,或者使用迭代器迭代数据集,但如果我理解正确,这似乎违背了使用以数据集 API 开头(例如,请参阅 https://www.tensorflow.org/guide/keras/overview#train_from_tfdata_datasets)。
我的问题:将my_dataset 转换为tf.keras.model.fit() 将收到的某种形式的适当方法是什么?或者,如果这是一个错误的问题,我错过了哪些让我无法提出正确问题的基本概念? (例如,.tfrecord 示例的结构是否应该不同?或者,我是否需要使用迭代器而不是直接将 my_dataset 传递给模型?)
【问题讨论】:
标签: python tensorflow keras deep-learning