web-dev-qa-db-ja.com

Kerasでは、N個の「ユニット」でステートフルな「LSTM」レイヤーを作成するときに、正確に何を設定していますか?

通常のDenseレイヤーの最初の引数もunitsであり、そのレイヤーのニューロン/ノードの数です。ただし、標準のLSTMユニットは次のようになります。

enter image description here

(これは「 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]出力のみが渡されます次のレイヤー。私は正しいですか?

34

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_dimunitと異なる場合があります。最初のステップで入力のみを行いたい場合は、他のタイムステップでデータにゼロを埋め込むだけで済みます。

24
Van

これは、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レイヤーを作成する場合、これで終わります: enter image description here そして、これはあなたのモデルになります。

N=1
model = Sequential()
model.add(LSTM(N))

他のモデルでは、N> 1 enter image description here

4
prosti

「LSTMチェーン」のインスタンスの数

Kerasリカレントニューラルネットワークの「ユニット」パラメーターの適切で直感的な説明は、units=1を使用すると教科書で説明されているようにRNNを取得し、units=nを使用するとnそのようなRNNの独立したコピー-それらは同一の構造を持ちますが、異なる重みで初期化されるので、異なるものを計算します。

または、units=1を含むLSTMでは、キー値(f、i、C、h)はスカラーであると考えることができます。 units=nを使用すると、長さnのベクトルになります。

0
Peteris