我在训练期间使用tensorflow运行队列来提供我的数据:
X, Y = tf.train.batch(
[image, label],
batch_size=64
)
Run Code Online (Sandbox Code Playgroud)
然而,X,Y的强制形状为[64,32,32,3]和[64,10].在评估期间,我想在整个测试集上运行损失操作,其尺寸为:[10000,32,32,3]和[10000,10].我会在session.run()中使用feed_dict属性用我的值覆盖X,Y,但它们具有不兼容的形状.
我可以以某种方式指示tensorflow忘记第一维,即重塑[64,32,32,3] - > [无,32,32,3]?或者我还有其他选择用另一个值替换X,Y.
整个数据集足够小以适应内存,因此我使用类似的方法,如https://github.com/tensorflow/tensorflow/blob/r0.9/tensorflow/examples/how_tos/reading_data/fully_connected_preloaded.py
这有点微妙:在TensorFlow术语中,您实际上并不想要reshape张量(即更改每个维度中元素的数量),而是希望TensorFlow"忘记"特定维度,以便为各种尺寸.
该tf.placeholder_with_default()运算被设计为支持这种情况.它需要一个默认输入,在您的情况下将是下一个训练批次(形状[64, ...]); 和一个形状,在你的情况下将与输入形状相同,第一个尺寸设置为None.然后,您可以使用任何批量大小的值为此占位符提供内容.
以下是您如何使用它的示例:
X_batch, Y_batch = tf.train.batch([image, label], batch_size=64)
# Alternatively, `X_shape = [None, 32, 32, 3]`
X_shape = tf.TensorShape([None]).concatenate(X_batch.get_shape()[1:])
# Alternatively, `Y_shape = [None, 10]`
Y_shape = tf.TensorShape([None]).concatenate(Y_batch.get_shape()[1:])
# Create tensors that can be fed with a less specific shape
# than `X_batch`, `Y_batch`.
X = tf.placeholder_with_default(X_batch, shape=X_shape)
Y = tf.placeholder_with_default(Y_batch, shape=Y_shape)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2498 次 |
| 最近记录: |