我有一个实时应用程序,我试图对来自Feed的图片进行分类。 classify_images示例包含:
image_data = tf.gfile.FastGFile(image, 'rb').read()
#...
with tf.Session() as sess:
predictions = sess.run(softmax_tensor,
{'DecodeJpeg/contents:0': image_data})
其中image
是图像文件的路径。但是,我没有从文件中读取图像,我将它们作为numpy数组接收。在以前获取的图像上运行Tensorflow会话的最佳方法是什么?此外,最佳做法是事先创建一个会话和一个图形,并且每当获取新帧时,在新图像上运行现有会话,而不是创建新图形和新会话?
编辑:
我试过了:
images_placeholder = tensorflow.placeholder(tensorflow.int32)
predictions = sess.run(softmax_tensor,
{images_placeholder: image})
它有效!谢谢sygi!
编辑2:
这会在一段时间后崩溃而没有错误消息,并且每个帧都预测了相同的标签。我甚至在每一帧都创建了一个新的images_place对象,但我仍然得到相同的标签。
答案 0 :(得分:1)
在a上运行Tensorflow会话的最佳方法是什么? 以前获得的图像?
我认为最好的方法是创建一个tf.placeholder
,在模型中使用它,最后在feed dict中传递numpy数组。
是预先创建一个会话和一个图形的最佳做法, 并且每当获取新帧时,运行现有会话 新图像,而不是创建新图表和新会话?
最好重复使用一个图表和一个会话。当您创建图形时,它会被“编译”以将您编写的代码更改为高效的GPU实现。你创建了很多图表 - 你会花很多时间做同样的“编译”。此外,当您重用一个会话时,您可以重用变量,防止它们从RAM传递到GPU内存。