我刚开始使用Tensorflow,我有一个新手问题。在Tensorflow中保存图像文件
我知道Tensorflow是所有关于神经网络,但我开始只是它的机制。我试图让它加载,调整大小,翻转并保存两个图像。应该是一个简单的操作,对,并且让我从基础开始。
这里是我到目前为止的代码:
import tensorflow as tf
import numpy as np
print("resizing images")
filenames = ['img1.png', 'img2.png' ]
filename_queue = tf.train.string_input_producer(filenames, num_epochs=1)
reader = tf.WholeFileReader()
key,value = reader.read(filename_queue)
images = tf.image.decode_png(value)
resized = tf.image.resize_images(images, 180,180, 1)
resized.set_shape([180,180,3])
flipped_images = tf.image.flip_up_down(resized)
resized_encoded = tf.image.encode_jpeg(flipped_images,name="save_me")
init = tf.initialize_all_variables()
sess = tf.Session()
with sess.as_default():
tf.train.start_queue_runners()
sess.run(init)
f = open("/tmp/foo1.jpeg", "wb+")
f.write(resized_encoded.eval())
f.close()
f = open("/tmp/foo2.jpeg", "wb+")
f.write(resized_encoded.eval())
f.close()
它工作正常,调整两个图像,并将其保存。但它总是以一个错误结束:
W tensorflow/core/common_runtime/executor.cc:1076] 0x7f97240e7a40
Compute status: Out of range: Reached limit of 1
我明显做错了事。如果我取消num_epochs = 1,那么它以无错误结束。
我有几个问题:
如何正确地做到这一点?
另外,如果我想通过保留原始文件名从filename_queue一路到底,所以我可以用原来的名称保存它们,我该怎么做呢?我怎么知道我需要保存多少个文件?假设我正在通过读取目录来创建文件名列表。我尝试了很多不同的东西,但是当我到达最后时,我无法知道我的知识。
我觉得奇怪,我说我打电话resized_encoded.eval()的两倍。
谢谢你,我敢肯定,这是一个非常基本的问题,但我不明白这是如何工作。
编辑:我创建了行为的一个更简单的演示:
import tensorflow as tf
import numpy as np
filenames = ['file1.png', 'file2.png' ]
filename_queue = tf.train.string_input_producer(filenames,
num_epochs=1, name="my_file_q")
reader = tf.WholeFileReader()
key,value = reader.read(filename_queue)
init = tf.initialize_all_variables()
sess = tf.Session()
with sess.as_default():
print("session started")
sess.run(init)
coord = tf.train.Coordinator()
threads = tf.train.start_queue_runners(coord=coord)
for i in range (2):
print(key.eval())
coord.request_stop()
coord.join(threads)
这给出了同样的警告。我不明白为什么。