RNN言語モデルのコードを見ています。 1)訓練ペア(x、y)がどのように構築され、続いて2)がどのように計算されるかについて混乱しています。このコードは、Tensorflow RNNチュートリアル(リーダーモジュール)から借りています。Tensorflow:リカレントニューラルネットワークトレーニングペア&ロス関数への影響
リーダーモジュール内では、発電機ptb_iteratorが定義されています。データは1つのシーケンスとして取り込まれ、は、バッチサイズとRNNをアンロールするステップ数に従って、 x、yペアを生成します。これは、最初の定義全体を見ることが最善ですが、私を混乱部分はこれです:
として文書化されてfor i in range(epoch_size):
x = data[:, i*num_steps:(i+1)*num_steps]
y = data[:, i*num_steps+1:(i+1)*num_steps+1]
yield (x, y)
:正しく理解していれば、データ系列[1 2 3 4 5 6]
とnum_steps = 2
ため、
*Yields:
Pairs of the batched data, each a matrix of shape [batch_size, num_steps].
The second element of the tuple is the same data time-shifted to the
right by one.*
次いで、確率的勾配降下法のために(すなわちBATCH_SIZE = 1)以下のペアが生成されます。
- X = [1,2]、Y = [2,3]
- X = [3,4]、Y = [5,6]
1)これは、これを行うための正しい方法はありますか?
- X = [1,2]、Y = [2,3]
- X = [2,3]、Y = [3,4]:ペアがあるようにそれが行われるべきではありません ...#は、[1,2]複数のデータポイント
OR
- X =を可能Y = [3]
- X = [2,3]、Y = [4 ] ...すべての予測がcontext length = num_stepで行われることを保証するS
2)最後に、彼らはreaderモジュールであるとして、それはトレーニングに来るときのペアは損失がない計算の代わりに巻かれていない段階の範囲にわたりRNNの業績が反映され、生成されたことを考えるとnum_steps
が指定されていますか?
たとえば、モデルは2がその前に来た(つまり、RNNを2つではなく1つのステップを展開する)ことを考慮せずにx = 3(x = [3,4]から)の予測を行います。