上下文:卷积式自动编码器
我将input_tensor和output_tensor添加到tf.add_to_collections()图中
Input to neural network from shuffle batch: [batch_size, patch_size, patch_size, depth]
During training, this is [512, 32, 32, 3]
Input to neural network for inference: [batch_size, height, width, depth]
During inference, this can be [1, 100, 100, 3], or [3, 150, 150, 3], etc.在推理过程中,我调用tf.get_collections()来提取这些节点,然后调用sess.run()。它说,形状是固定在512,32,32,3,我如何解决这个问题?
发布于 2016-10-31 18:20:04
一个潜在的解决方案是使用tf.placeholder_with_default() op来放松输入op的形状需求。例如:
input_batch = tf.train.shuffle_batch(..., batch_size=512)
input_placeholder = tf.placeholder_with_default(input_batch, [None, None, None, 3])如果您运行的代码依赖于input_placeholder,但不提供它,那么它将使用tf.train.shuffle_batch()的结果。或者,如果您为input_placeholder提供一个值,您可以为任何4-D张量(深度为3)提供数据,因此您可以使用任意批处理大小或图像大小。
但是,请注意,这样做将在培训中禁用一些优化,因为每个批处理的形状现在可能有所不同,至少在原则上是这样的。这使TensorFlow无法将某些内部tf.shape()调用视为常量值,这可能意味着它需要在每个培训步骤上做更多的工作。最后,为了训练和推理,最好构建两个独立的图,因为它们可以分别进行优化。
https://stackoverflow.com/questions/40340807
复制相似问题