tf阅读器究竟返回了什么?

时间:2017-04-15 16:16:58

标签: python python-3.x tensorflow

tf阅读器通常会返回键和值,那么它们是什么? 我试图看看它们到底是什么,但都失败了。 在运行时:

filename = tf.train.string_input_producer(['/home/noodle/99282.jpg'])
reader = tf.WholeFileReader()
key, k = reader.read(filename)
g = tf.image.decode_image(k)
init_op = tf.global_variables_initializer()

with tf.Session() as sess:
    sess.run(init_op)
    coord = tf.train.Coordinator()
    threads = tf.train.start_queue_runners(coord=coord)
    sess.run(g)
    sess.run(key)
    print(key, g)
    coord.request_stop()
    coord.join(threads)

它返回

Tensor("ReaderReadV2:0", shape=(), dtype=string) Tensor("decode_image_1/cond_jpeg/Merge:0", dtype=uint8)

无法弄清楚~~~

2 个答案:

答案 0 :(得分:0)

在您的示例中,key是文件名,k是jpeg编码的图像。当您使用sess.run(key)时,将评估张量key并将结果作为python变量返回。您可以在run部分详细了解此here。以你的例子:

py_g, py_key = sess.run([g, key)
print(py_key)
plt.imshow(py_g)
plt.show()

请注意,您应该使用要评估的所有张量的列表调用sess.run,以确保所有变量都同步。如果您单独评估张量,它们将对应于单独的图表执行,如果由队列提供,则可能会不同步(例如string_input_producer有多个文件名列表)。

答案 1 :(得分:0)

引自tf.WholeFileReader的文档:

  

将文件的全部内容输出为值的Reader。   要使用,请将队列中的文件名排入队列。 Read的输出将会   是文件名(密钥)和该文件的内容(值)

但是,我猜你在解码图像时做错了,没有指定要解码的图像的通道数。

tf.image.decode_image(contents, channels=None, name=None)

请不要print()解码后的图像。尝试使用像matplotlib这样的绘图库来显示它。