我目前正在尝试训练神经网络。我有一组文件名及其相应的标签。但是我在尝试训练网络时遇到了问题。
image_list, label_list = readImageLables()
images = ops.convert_to_tensor(image_list, dtype=dtypes.string)
labels = ops.convert_to_tensor(label_list, dtype=dtypes.int32)
with tf.Session() as sess:
init_op = tf.initialize_all_variables()
sess.run(init_op)
coord = tf.train.Coordinator()
threads = tf.train.start_queue_runners(sess=sess, coord=coord)
for epoch in range(hm_epochs):
epoch_loss = 0
for _ in range(int(7685/batch_size)):
print(labels.eval())
filename_queue = tf.train.slice_input_producer([images,labels], num_epochs=10, shuffle=True)
image,label = read_images_from_disk(filename_queue)
print(image.eval())
epoch_x, epoch_y = tf.train.batch([image, label], batch_size=batch_size)
print("wait what")
#imgs, lbls = epoch_x.eval(), epoch_y.eval()
_, c = sess.run([optimizer, cost], feed_dict={x: epoch_x.eval(), y: epoch_y.eval()})
epoch_loss += c
print('Epoch', epoch, 'completed out of',hm_epochs,'loss:',epoch_loss)
在我尝试打印图像数据的行中,程序挂起。即使删除了这一行,该程序仍然挂在最后一个sess.run调用中,我将在该调用中提供此数据。我已经初始化了队列运行器,协调器等。但是,我感觉filename_queue有问题。 tf.train.slice_input_producer行中有什么我遗漏的东西吗?该程序也挂起或只是需要一段时间才能加载。加载批量大小为100且图像为80×70的时期通常需要多长时间?
答案 0 :(得分:1)
这看起来像是我打开的一个问题。在输入数据的同时,输入队列运行器正在挂起。这是因为你必须启动它。
从issue开始,我们有:
引用: RudrakshTuwani
对于其他正在努力解决此问题的人,请阅读文档 通过girving提到。对于懒惰的人:init = tf.global_variables_initializer() sess.run(init) threads = tf.train.start_queue_runners() print(sess.run(name_of_output_tensor))
以及:
来自: girving
您可能需要启动队列运行程序。请参阅文档 在https://www.tensorflow.org/versions/r0.11/how_tos/threading_and_queues/index.html
希望它有所帮助!
pltrdy
请注意,在我的情况下,我感到困惑,因为original code正在使用:
sv = tf.train.Supervisor(logdir=FLAGS.save_path)
with sv.managed_session() as session:
而不是我(和你的):
with tf.Session() as session:
第一个实际上是隐含地启动队列跑步者。