TensorFlowの日本語まとめ

TensorFlowの公式サイトに書かれている英文を英語ど素人が翻訳(日本語訳/和訳)します。 間違いがありましたら、優しく教えていただけますと幸いです。 内容を理解したら、使ってみたい。

2.キューランナー

キューランナークラスは繰り返しエンキューOP実行するスレッドの数を作成します。これらのスレッドは一緒に停止するためにコーディネーターを使用することができます。また、キューランナーは、例外がコーディネータに報告された場合、自動的にキューを閉じ近いスレッドを実行します。

 

f:id:TensorFlow:20160130020736j:plain

スポンサーリンク

 

あなたは上記のアーキテクチャを実装するためにキューランナーを使用することができます

 

最初の入力例のQueueを使用してグラフを構築します。そのプロセスの例のアドオンを追加し、キューにエンキューします。キューからデキューすることから始めるトレーニングOPSを追加します

 

example = ...ops to create one example...
# Create a queue, and an op that enqueues examples one at a time in the queue.
queue = tf.RandomShuffleQueue(...)
enqueue_op = queue.enqueue(example)
# Create a training graph that starts by dequeuing a batch of examples.
inputs = queue.dequeue_many(batch_size)
train_op = ...use 'inputs' to build the training part of the graph...

 

Pythonのトレーニングプログラムでは、いくつかのスレッドが処理し、エンキューののために実行されるキューランナーを作成しますCoordinatorを作成し、コーディネーターとのスレッドを開始するためにキューランナーを尋ねます。また、コーディネーターを使用する訓練ループを書きます。

# Create a queue runner that will run 4 threads in parallel to enqueue
# examples.
qr = tf.train.QueueRunner(queue, [enqueue_op] * 4)

# Launch the graph.
sess = tf.Session()
# Create a coordinator, launch the queue runner threads.
coord = tf.train.Coordinator()
enqueue_threads = qr.create_threads(sess, coord=coord, start=True)
# Run the training loop, controlling termination with the coordinator.
for step in xrange(1000000):
    if coord.should_stop():
        break
    sess.run(train_op)
# When done, ask the threads to stop.
coord.request_stop()
# And wait for them to actually do it.
coord.join(threads)

 

例外の処理

キューランナーによって開始されたスレッドは単にエンキューOPSを実行する以上のことを行います。それらはまた、キャッチし、キューが閉じられたことを報告するために使用されるOutOfRangeErrorを含むキューによって生成された例外を処理します。

 

コーディネーターを使用するトレーニングプログラムは、同様にキャッチし、そのメインループで例外を報告しなければなりません。

 

ここでは上記のトレーニングループの改良版です。

try:
    for step in xrange(1000000):
        if coord.should_stop():
            break
        sess.run(train_op)
except Exception, e:
   # Report exceptions to the coordinator.
   coord.request_stop(e)

# Terminate as usual.  It is innocuous to request stop twice.
coord.request_stop()
coord.join(threads)

 

(原文)

Threading and Queues