直到最近,我在 TF 中的所有代码都使用 tf.placeholder
来表示输入。这非常方便,因为它允许我向我的网络提供一批任意长度的数据,允许在不同的地方使用相同的代码(训练、测试、预测……)
在发现 feed_dict
太慢之后,我想改变并开始使用管道,它基本上使用 tf.Variable
而不是占位符:每个变量都是一个固定长度张量,表示用作网络输入的批处理。
我的问题是,虽然占位符是“未绑定(bind)的”并且您必须向其提供数据,但管道绑定(bind)到输入数据。因此,例如,一旦我将我的管道设置为使用大小为 10 的批量训练数据,我就不能使用来自测试集的数据,例如 12 个示例。
或者我可以吗?
没有占位符的正确工作方式是什么?
最佳答案
cifar10 示例不使用占位符。它使用 tf.FixedLengthRecordReader 和 tf.train.shuffle_batch。生成的输入图像批处理直接传递给 CNN,没有占位符。
请引用tensorflow官方教程及其python代码:
https://github.com/tensorflow/models/blob/master/tutorials/image/cifar10/cifar10_train.py
此外,在测试时,您可以将测试数据的管道与训练数据中不同批处理的数据链接起来。
请引用评估代码: https://github.com/tensorflow/models/blob/master/tutorials/image/cifar10/cifar10_eval.py
关于python - 在没有 TensorFlow 占位符的情况下工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43229807/