Tensorflow:是否可以使用不同的列车输入大小和测试输入大小?

时间:2017-12-11 03:58:37

标签: python tensorflow

我是Tensorflow初学者,我正在尝试学习如何使用Tensorflow。我知道我们可以建立一个网络模型并为网络创建一对输入和标签,即

inputs = tf.placeholder(tf.float32, [None, patch_size, patch_size, num_channels], name="inputs")
labels = tf.placeholder(tf.float32, [None, patch_size, patch_size, num_channels], name="labels")
network = build_network(inputs, ...)
optimizer = get_optimizer(labels, ...)
session.run(optimizer, {inputs: input_batch, labels: label_batch})
save.save(session, path)

假设在上述情况下,patch_size为50。

现在,当我们尝试执行测试时,我们可以重复使用上面的一些代码来构建网络模型并运行测试。假设我将补丁大小设置为180.如果我恢复检查点但指定了不同的patch_size来构建网络模型,Tensorflow如何对待它呢?

patch_size=180
inputs = tf.placeholder(tf.float32, [None, patch_size, patch_size, num_channels], name="inputs")
labels = tf.placeholder(tf.float32, [None, patch_size, patch_size, num_channels], name="labels")
network = build_network(inputs, ...)
saver.restore(session, path)
prediction = session.run(network, {inputs:, input_batch})

据我所知,Tensorflow可以接受不同的列车输入尺寸(批量大小50)和测试输入尺寸(批量大小180)。

  1. 那么当火车和测试输入尺寸不同时,Tensorflow如何在内部进行预测输出?

  2. 可以使用不同的输入尺寸吗?

  3. 使用不同的输入尺寸是否有任何优点或缺点?

1 个答案:

答案 0 :(得分:4)

  1. TensorFlow不需要静态知道所有尺寸。如果静态地知道大小,则可以对各种内部优化和检查有所帮助,但通常不是必需的。 Tensorflow不会预测"尺寸。给定一个特定的输入(在session.run()中)它只运行操作。操作'内核可能需要静态知道某些大小,但也可以使用某些大小仅在运行时可用。

  2. 一般来说,是的。如果你没有看到任何错误,你应该是好的。此规则有一些例外,其中TensorFlow不会给您一个明确的错误,但它可能不符合您的预期。例如,如果您使用static_rnn但输入不同长度的输入,则会用零填充并运行所有RNN步骤。这是记录在案的,并且有一个dynamic_rnn变体,您可以在其中传递sequence_length

  3. 一般情况下,静态知识越多,您可能获得的性能越好,但这种情况差别很大。我建议您先默认为最方便的东西。如果你觉得它应该更快,你可以投资它试图均匀化你的图形并指定尽可能多的尺寸。通常,TensorFlow在形状推断方面表现相当不错。只要您指定占位符大小,通常可以推断其余大小。如果需要,可以通过查询某个中间张量的形状来检查这个。