2017-03-05 14 views
1

私はRNN tutorial of Tensorflowに従っています。 私はトラブルのスクリプトを以下にreader.pyfunction ptb_producerを理解することが生じています:Tensorflow RNNチュートリアル

with tf.control_dependencies([assertion]): 
     epoch_size = tf.identity(epoch_size, name="epoch_size") 

    i = tf.train.range_input_producer(epoch_size, shuffle=False).dequeue() 
    x = tf.strided_slice(data, [0, i * num_steps],[batch_size, (i + 1) * num_steps]) 
    x.set_shape([batch_size, num_steps]) 
    y = tf.strided_slice(data, [0, i * num_steps + 1],[batch_size, (i + 1) * num_steps + 1]) 
    y.set_shape([batch_size, num_steps]) 
    return x, y 

誰もがtf.train.range_input_producerが何をしているか説明できますか?

答えて

0

私は数週間同じチュートリアルを理解しようとしています。私の意見では、TensorFlowから呼び出される関数はすべて即座に実行されるのではなく、対応する演算ノードをグラフに追加するという事実は難しいです。

official documentationによると、範囲入力プロデューサ 'は0からlimit - 1までの整数をキューに生成します。したがって、私がそれを見る方法では、問題のコードi = tf.train.range_input_producer(epoch_size, shuffle=False).dequeue()は、カウンタとして機能するノードを作成し、シーケンス0:(epoch_size)が実行された次の番号を生成します。

これは、入力データから次のバッチを取得するために使用されます。生データはbatch_sizeの行に分割されるので、すべての実行で、トレーニング機能にバッチが割り当てられます。batch_sizeすべてのバッチ(行)で、サイズがnum_stepsのスライドウィンドウが前方に移動します。 iカウンタを使用すると、すべてのコールでウィンドウをnum_stepsだけ前方に移動できます。それらはnum_stepsステップ毎のbatch_sizeバッチを含むので

両方 x

yは、形状[batch_size, num_steps]です。変数xが入力され、yiff x = data[i:(i + num_steps] then y = data[(i + 1):(i + num_steps + 1)]ように(それは、左のウィンドウの項目を移動することによって製造され、与えられた入力に対して予想される出力である。

それは私にとっては悪夢となっているが、私はこのポストを願っています将来的に人々を助ける。

関連する問題