我正在为TensorFlow 文档中显示的输入管道试用 Dataset API,并使用几乎相同的代码:
tr_data = Dataset.from_tensor_slices((train_images, train_labels))
tr_data = tr_data.map(input_parser, NUM_CORES, output_buffer_size=2000)
tr_data = tr_data.batch(BATCH_SIZE)
tr_data = tr_data.repeat(EPOCHS)
iterator = dataset.make_one_shot_iterator()
next_example, next_label = iterator.get_next()
# Script throws error here
loss = model_function(next_example, next_label)
with tf.Session(...) as sess:
sess.run(tf.global_variables_initializer())
while True:
try:
train_loss = sess.run(loss)
except tf.errors.OutOfRangeError:
print("End of training dataset.")
break
Run Code Online (Sandbox Code Playgroud)
这应该更快,因为它避免使用慢速 feed_dicts。但是我不能让它与我的模型一起工作,这是一个简化的 LeNet 架构。该问题是tf.layers.dense在我model_function()这期待一个已知输入形状(我猜是因为它必须知道权重的数目事先)。但是next_example,next_label只有通过在会话中运行它们才能获得它们的形状。在评估它们之前,它们的形状是不确定的?
声明model_function()抛出此错误:
ValueError:
Dense应定义输入的最后一个维度。找到了None。
现在,我不知道我是否以预期的方式使用此数据集 API,或者是否有解决方法。 …