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)
无法弄清楚~~~
答案 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这样的绘图库来显示它。