【问题标题】:Tensorflow: Is it possible to use different train input size and test input size?Tensorflow:是否可以使用不同的训练输入大小和测试输入大小?
【发布时间】:2017-12-13 02:46:31
【问题描述】:

我是 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。如果我恢复检查点但指定不同的补丁大小来构建网络模型,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. 使用不同的输入大小有什么优点或缺点吗?

【问题讨论】:

    标签: python tensorflow


    【解决方案1】:
    1. TensorFlow 不需要静态知道所有大小。如果大小是静态已知的,它可能有助于各种内部优化和检查,但通常不是必需的。 Tensorflow 不会“预测”大小。给定一个特定的输入(session.run()),它只运行操作。操作的内核可能需要静态知道某些大小,但也可以使用仅在运行时可用的某些大小。

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

    3. 一般来说,静态知道的东西越多,您可能获得的性能就越好,但这差别很大。我建议您首先默认使用最方便的方式。如果您觉得它应该更快,您可以投资它尝试使您的图形同质化并指定尽可能多的尺寸。一般来说,TensorFlow 在形状推断方面做得很好。只要您指定占位符大小,通常可以推断出其余部分。如果需要,您可以通过查询一些中间张量的形状来检查这一点。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-07-25
      • 1970-01-01
      • 2018-09-26
      • 1970-01-01
      • 2016-07-15
      • 2016-11-15
      • 2018-02-21
      • 2021-10-30
      相关资源
      最近更新 更多