質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Keras

Kerasは、TheanoやTensorFlow/CNTK対応のラッパーライブラリです。DeepLearningの数学的部分を短いコードでネットワークとして表現することが可能。DeepLearningの最新手法を迅速に試すことができます。

Q&A

解決済

1回答

5245閲覧

LSTMの隠れ層の追加

k.brook

総合スコア15

Keras

Kerasは、TheanoやTensorFlow/CNTK対応のラッパーライブラリです。DeepLearningの数学的部分を短いコードでネットワークとして表現することが可能。DeepLearningの最新手法を迅速に試すことができます。

0グッド

0クリップ

投稿2019/06/07 00:30

前提・実現したいこと

https://qiita.com/tizuo/items/b9af70e8cdc7fb69397f

多変量LSTMのコードです.
このコードで示される「隠れ層の数」,「入力層,出力層それぞれのユニット数」,「隠れ層のLSTMブロック数」はいくつなのでしょうか.

また隠れ層の数を増やすためには

model = Sequential()
model.add(LSTM(4, input_shape=(testX.shape[1], look_back)))
model.add(Dense(1))
model.compile(loss='mean_squared_error', optimizer='adam')
model.fit(trainX, trainY, epochs=1000, batch_size=1, verbose=2)

3行目にあるmodel.add(Dense(1))をさらに追加すればよいのでしょうか.

発生している問題・エラーメッセージ

エラーメッセージ

該当のソースコード

ソースコード

試したこと

ここに問題に対して試したことを記載してください。

補足情報(FW/ツールのバージョンなど)

ここにより詳細な情報を記載してください。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

LSTMに関するモデル生成については、以下の記事でわかりやすく書いてあります。

参考記事:初心者のRNN(LSTM) | Kerasで試してみる

この記事では、各コードについて以下のように説明されています。

# モデル構築 # 1つの学習データのStep数(今回は25) length_of_sequence = g.shape[1] in_out_neurons = 1 n_hidden = 300 model = Sequential() model.add(LSTM(n_hidden, batch_input_shape=(None, length_of_sequence, in_out_neurons), return_sequences=False)) model.add(Dense(in_out_neurons)) model.add(Activation("linear")) optimizer = Adam(lr=0.001) model.compile(loss="mean_squared_error", optimizer=optimizer)

・n_hidden: 隠れ層 -> 数が多い程,学習モデルの複雑さが増加

・batch_input_shape: LSTMに入力するデータの形を指定([バッチサイズ,step数,特徴の次元数]を指定する)
Denseでニューロンの数を調節しているだけ.今回は,時間tにおけるsin波のy軸の値が出力なので,ノード数1にする.
・線形の活性化関数を用いている.
・compileで,誤差関数:最小2乗誤差,最適化手法: Adamを用いるように定義

今回の質問にあるコードで考えると、以下のように解釈できます。

model = Sequential() #隠れ層(LTSMブロック数)4,入力ユニット数testX.shape[1]のLSTMブロックを作成 model.add(LSTM(4, input_shape=(testX.shape[1], look_back))) #出力ユニットが1になるよう調整 model.add(Dense(1)) model.compile(loss='mean_squared_error', optimizer='adam') model.fit(trainX, trainY, epochs=1000, batch_size=1, verbose=2)

結論、質問に対する答えは次のようになります。

・隠れ層の数…5つ(LSTM4層+Dense1層)
・入力層のユニット数…testX.shape[1]の値
・出力層のユニット数…1つ
・隠れ層のLSTMブロック数…4つ

また、隠れ層の追加については、以下のようにLSTM関数の第1引数を調整することで行なえます。

#model.add(LSTM(4, input_shape=(testX.shape[1], look_back))) model.add(LSTM(100, input_shape=(testX.shape[1], look_back)))

実際、LSTM関数の第1引数を4から100に変えて実行したところ、RMSEの低下(誤差の低減)が見られました。ただし、4から40に変えたときはRMSEが大きく低下しましたが、40から100に変えたときはそれほどRMSEが変化していません(すなわち学習率の頭打ち)。

闇雲に隠れ層の数を増やせばよいというわけでもないようです。

投稿2019/06/07 14:32

amahara_waya

総合スコア1029

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

k.brook

2019/06/07 20:48

丁寧な説明ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問