1. ホーム
  2. python

[解決済み] KerasのLSTMを理解する

2022-03-25 04:58:14

質問

私は、LSTMについての私の理解と、ここで指摘されていることを調和させようとしています。 Christopher Olahの投稿 をKerasで実装しました。を追っています。 ジェイソン・ブラウンリー氏によるブログ のチュートリアルのためです。私が主に混乱しているのは、次のとおりです。

  1. データ系列のリシェイプを [samples, time steps, features] とします。
  2. ステートフルLSTMの

上記の2つの質問について、以下に貼り付けたコードを参照しながら考えてみましょう。

# reshape into X=t and Y=t+1
look_back = 3
trainX, trainY = create_dataset(train, look_back)
testX, testY = create_dataset(test, look_back)

# reshape input to be [samples, time steps, features]
trainX = numpy.reshape(trainX, (trainX.shape[0], look_back, 1))
testX = numpy.reshape(testX, (testX.shape[0], look_back, 1))
########################
# The IMPORTANT BIT
##########################
# create and fit the LSTM network
batch_size = 1
model = Sequential()
model.add(LSTM(4, batch_input_shape=(batch_size, look_back, 1), stateful=True))
model.add(Dense(1))
model.compile(loss='mean_squared_error', optimizer='adam')
for i in range(100):
    model.fit(trainX, trainY, nb_epoch=1, batch_size=batch_size, verbose=2, shuffle=False)
    model.reset_states()

注:create_datasetは,長さNのシーケンスを受け取り N-look_back の配列で、各要素は look_back 長さのシーケンスです。

タイムステップとフィーチャーとは?

TrainXは3次元配列で、Time_stepsとFeatureはそれぞれ最後の2次元(このコードでは3および1)です。下の画像に関して、これは私たちが many to one の場合、ピンクのボックスの数は3でしょうか?それとも文字通り、チェーンの長さが3である(つまり、3つの緑のボックスだけを考慮する)ことを意味するのでしょうか?

多変量解析を行う場合、特徴量に関する議論は重要ですか?

ステートフルLSTM

ステートフルLSTMとは、バッチの実行の間にセルメモリの値を保存するということでしょうか?もしそうであれば batch_size が1つで、学習実行の間にメモリはリセットされるので、ステートフルと言ったのは何だったのでしょう。トレーニングデータがシャッフルされないことと関係があると思いますが、どうなんでしょう。

何かご意見はありますか? 画像参照 http://karpathy.github.io/2015/05/21/rnn-effectiveness/

1を編集します。

赤と緑のボックスが等しいという@vanのコメントについて、少し混乱しています。では、確認ですが、以下のAPIコールは展開された図に対応しているのでしょうか?特に2番目のダイアグラム( batch_size は任意に選択しました)。 <イグ

2を編集します。

Udacityのディープラーニング講座をやって、それでもtime_stepの引数に戸惑う人は、以下の議論を見てください。 https://discussions.udacity.com/t/rnn-lstm-use-implementation/163169

更新情報

それが判明したのは model.add(TimeDistributed(Dense(vocab_len))) は、私が探していたものでした。以下はその例です。 https://github.com/sachinruk/ShakespeareBot

Update2です。

LSTMに関する私の理解の大部分をここにまとめました。 https://www.youtube.com/watch?v=ywinX5wgdEU

解決方法は?

まず、素晴らしいチュートリアルを選びます( 1 , 2 )を開始します。

タイムステップの意味 : Time-steps==3 X.shape(データの形状を記述する)でピンクのボックスが3つあることを意味します。Kerasでは各ステップで入力が必要なので、通常、緑のボックスの数は赤のボックスの数と同じになるはずです。構造をハックしない限り。

多対多と多対一の比較 : kerasでは return_sequences を初期化する際に、パラメータ LSTM または GRU または SimpleRNN . いつ return_sequencesFalse (デフォルト)であれば、それは 多対一 のようになります。その戻り形状は (batch_size, hidden_unit_length) これは最後の状態を表しています。このとき return_sequencesTrue であれば、それは 多対多 . その返送形状は (batch_size, time_step, hidden_unit_length)

機能に関する議論が重要になるか : Feature引数とは 赤い箱の大きさはどのくらいですか? とか、各ステップの入力次元がどうなっているかとか。例えば8種類の市場情報から予測したい場合、データを生成する際に feature==8 .

ステートフル : を調べることができます。 ソースコード . 状態を初期化するとき、もし stateful==True であれば、前回の学習時の状態が初期状態として使用され、そうでなければ新しい状態が生成されます。をオンにしていない。 stateful はまだです。しかし、私はそのことに反対です batch_size が1であるときだけです。 stateful==True .

現在、収集したデータでデータを生成しています。在庫情報が流れてくるイメージで、1日かけてシーケンシャルに収集するのではなく、入力データを生成したい。 オンライン ネットワークで学習/予測しながら。もし、400の銘柄が同じネットワークを共有しているのであれば、以下のように設定する。 batch_size==400 .