我正在试用datasets#using_high-level_apis" rel="nofollow noreferrer">TensorFlow documentation中显示的输入管道的数据集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
这应该更快,因为它避免了使用慢的feed-dicts。但是我不能用我的模型,它是一个简化的LeNet架构。问题是我的model_function()
中的tf.layers.dense
,它需要一个已知的输入形状(我猜是因为它必须事先知道权重的数目)。但是next_example
和{?
声明model_function()
会引发以下错误:
ValueError: The last dimension of the inputs to
Dense
should be defined. FoundNone
.
现在,我不知道我是按预期的方式使用这个数据集API,还是有解决办法。在
提前谢谢!在
编辑1: 下面是我的模型,它在第一个密集层抛出错误
^{pr2}$编辑2:
这里你看到张量的指纹。请注意,下一个例子没有形状
next_example: Tensor("IteratorGetNext:0", dtype=float32)
next_label: Tensor("IteratorGetNext:1", shape=(?, 4), dtype=float32)
我自己找到了答案。在
接下来的thread最简单的解决方法是,如果事先知道图像大小,只需使用
tf.Tensor.set_shape
设置形状。在如果tensorflow文档包含这行代码,那就太好了。在
相关问题 更多 >
编程相关推荐