通常のDense
レイヤーの最初の引数もunits
であり、そのレイヤーのニューロン/ノードの数です。ただし、標準のLSTMユニットは次のようになります。
(これは「 nderstanding LSTM Networks 」の改訂版です)
Kerasでは、このLSTM(units=N, ...)
のようなLSTMオブジェクトを作成するとき、実際にこれらのLSTMユニットのN
を作成していますか?それとも、LSTMユニット内の「ニューラルネットワーク」層のサイズ、つまり式のW
のサイズですか?それとも別のものですか?
コンテキストでは、 このサンプルコード に基づいて作業しています。
以下はドキュメントです: https://keras.io/layers/recurrent/
それは言います:
units:正の整数、出力スペースの次元。
Keras LSTM「レイヤー」オブジェクトからの出力の数だと思います。次のレイヤーの意味はN
入力になります。それは、LSTM層にこれらのLSTMユニットのN
が実際に存在することを意味しますか、それとも正確にoneLSTMユニットが実行されることを意味しますかN
これらのh[t]
値のN
を出力する反復、たとえばh[t-N]
からh[t]
まで?
出力の数だけを定義する場合、それは入力がまだちょうどoneであることを意味しますか、または手遅れの入力を手動で作成する必要がありますか変数x[t-N]
からx[t]
、units=N
引数で定義されたLSTMユニットごとに1つ?
これを書いていると、引数return_sequences
が何をするかがわかります。 True
に設定すると、すべてのN
出力が次のレイヤーに渡され、False
に設定すると、最後のh[t]
出力のみが渡されます次のレイヤー。私は正しいですか?
Keras-1.x APIに基づいていますが、詳細については この質問 を確認してください。
基本的に、unit
はLSTMの内部セルの次元を意味します。 LSTMでは、内部セル(グラフのC_tおよびC_ {t-1})、出力マスク(グラフのo_t)、および非表示/出力状態(グラフのh_t)の次元は[〜#〜] same [〜#〜]ディメンション、したがって、出力のディメンションもunit
- lengthである必要があります。
KerasのLSTM
は、セルがunit
- lengthのLSTMブロックを1つだけ定義します。 return_sequence=True
を設定すると、形状が(batch_size, timespan, unit)
の何かを返します。 false
の場合、形状(batch_size, unit)
の最後の出力を返します。
入力に関しては、すべてのタイムスタンプに入力を提供する必要があります。基本的に、形状は(batch_size, timespan, input_dim)
のようなもので、input_dim
はunit
と異なる場合があります。最初のステップで入力のみを行いたい場合は、他のタイムステップでデータにゼロを埋め込むだけで済みます。
これは、LSTMレイヤーにこれらのLSTMユニットが実際にN個存在することを意味しますか、または、h [t]値からhまでのN個のh [t]値を出力するN回の反復で、正確に1つのLSTMユニットが実行されることを意味しますか[t]?
最初は本当です。そのKeras LSTMレイヤーには、N個のLSTMユニットまたはセルがあります。
keras.layers.LSTM(units, activation='tanh', recurrent_activation='hard_sigmoid', use_bias=True, kernel_initializer='glorot_uniform', recurrent_initializer='orthogonal', bias_initializer='zeros', unit_forget_bias=True, kernel_regularizer=None, recurrent_regularizer=None, bias_regularizer=None, activity_regularizer=None, kernel_constraint=None, recurrent_constraint=None, bias_constraint=None, dropout=0.0, recurrent_dropout=0.0, implementation=1, return_sequences=False, return_state=False, go_backwards=False, stateful=False, unroll=False)
1セルの単純なLSTMレイヤーを作成する場合、これで終わります: そして、これはあなたのモデルになります。
N=1
model = Sequential()
model.add(LSTM(N))
Kerasリカレントニューラルネットワークの「ユニット」パラメーターの適切で直感的な説明は、units=1
を使用すると教科書で説明されているようにRNNを取得し、units=n
を使用するとn
そのようなRNNの独立したコピー-それらは同一の構造を持ちますが、異なる重みで初期化されるので、異なるものを計算します。
または、units=1
を含むLSTMでは、キー値(f、i、C、h)はスカラーであると考えることができます。 units=n
を使用すると、長さn
のベクトルになります。