2

現在、ニューラルネットワークをトレーニングしようとしています。私はファイル名とそれに対応するラベルの配列を持っています。しかし、私はネットワークを訓練しようとするときに問題を抱えています。入力キューが応答しないTensorFlowプログラムがハングする

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

あなたは 'top'や' nvidia-smi'のリソースを利用していますか? – drpng

答えて

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

希望しますか?
original codeを使用していたので、私の場合、私は混乱しましたことを pltrdy


注:

sv = tf.train.Supervisor(logdir=FLAGS.save_path) 
    with sv.managed_session() as session: 

の代わりに、私(とあなたを):

with tf.Session() as session: 

最初のものを実際にキューランナーを暗黙的に開始します。

関連する問題