我是TensorFlow的新手,并且在阅读数据的机制方面有点绊倒了。我在mnist数据上设置了TensorFlow图,但是我想修改它以便我可以运行一个程序来训练它+保存模型,然后运行另一个程序来加载图形,进行预测和计算测试准确度。
我感到困惑的是如何绕过训练图中的原始I / O系统并注意"注入"用于预测的图像或用于精度测试的测试数据的(图像,标签)元组。要阅读培训数据,请使用以下代码:
_, input_data = util.read_examples(
paths_to_files,
batch_size,
shuffle=shuffle,
num_epochs=None)
feature_map = {
'label': tf.FixedLenFeature(
shape=[], dtype=tf.int64, default_value=[-1]),
'image': tf.FixedLenFeature(
shape=[NUM_PIXELS * NUM_PIXELS], dtype=tf.int64),
}
example = tf.parse_example(input_data, features=feature_map)
然后我将示例提供给卷积层等,并生成输出。
现在假设我使用指定输入的代码训练我的图形,保存图形和权重,然后在另一个脚本中恢复图形和权重以进行预测 - 我想采取(比如说)10图像并将它们提供给图形以生成预测。我如何"注射"这10张图片是为了让预测从另一端出来?
我玩过饲料词典和占位符,但我不确定它们是否适合我使用......似乎它们依赖于在内存中存储数据,而不是例如,从测试数据队列中读取。
谢谢!
答案 0 :(得分:0)
如果您想要执行少量的推理/评估(即足以适应内存),带有占位符的Feed字典会有意义 - 例如如果你正在服务一个简单的模型或运行小的eval循环。
如果您特别想要推断或评估大批量,那么您应该使用您用于培训的相同方法,但使用与测试/评估/实时数据不同的路径。 e.g。
_, eval_data = util.read_examples(
paths_to_files, # CHANGE THIS BIT
batch_size,
shuffle=shuffle,
num_epochs=None)
您可以将其用作普通的python变量,并设置连续的相关步骤,以将其用作提供的变量。 e.g。
def get_example(data):
return tf.parse_example(data, features=feature_map)
sess.run([get_example(path_to_your_data)])