我浏览了Tensorflow for poets Tutorial然后对我自己的图像进行了分类,这些都是在提供的TF docker容器中完成的。该模型具有中低到90的验证准确度。有一个单独的文件可以预测新图像(下图)。
我复制了文件' retrained_labels_corn.txt'和' retrained_graph_corn.pd'以及将下面看到的代码保存到目录中的文件(并更改了文件路径),看看我是否可以在docker容器中进行预测。我确保给它一个有效的图像路径作为系统arg,但它总是将图像预测为一个概率高于97%的类。当我在docker容器中做同样的事情时一切正常。我甚至尝试将标签文件指向与docker容器使用的完全相同的文件,并且我得到了相同的结果,它始终预测一个具有高度确定性的类。
我做错了什么?
import tensorflow as tf, sys
image_path = sys.argv[1]
# Read in the image_data
image_data = tf.gfile.FastGFile(image_path, 'rb').read()
# Loads label file, strips off carriage return
label_lines = [line.rstrip() for line
in tf.gfile.GFile("/tf_files/retrained_labels_corn.txt")]
# Unpersists graph from file
with tf.gfile.FastGFile("/tf_files/retrained_graph_corn.pb", 'rb') as f:
graph_def = tf.GraphDef()
graph_def.ParseFromString(f.read())
_ = tf.import_graph_def(graph_def, name='')
with tf.Session() as sess:
# Feed the image_data as input to the graph and get first prediction
softmax_tensor = sess.graph.get_tensor_by_name('final_result:0')
predictions = sess.run(softmax_tensor, \
{'DecodeJpeg/contents:0': image_data})
# Sort to show labels of first prediction in order of confidence
top_k = predictions[0].argsort()[-len(predictions[0]):][::-1]
for node_id in top_k:
human_string = label_lines[node_id]
score = predictions[0][node_id]
print('%s (score = %.5f)' % (human_string, score))
我使用的是Ubuntu版本16.04和TF 0.10