2017-09-22 14 views
0

seq2seqモデルのエンコーダでバックプロパゲーションがどのように機能するかを理解できません。ラベルはありません。したがって、LSTMレイヤーの重みは何らかの形で更新されますが、バックプロパゲーションされたエラーを計算することはできません。seq2seq - エンコーダバックプロパゲーション

l_enc_input = Input(batch_shape=(batch_size, None, embedding_size)) 
l_enc_lstm = LSTM(encoding_size, return_sequences=False, return_state=True, stateful=True, dropout=0.2) 

l_dec_input = Input(batch_shape=(batch_size, None, embedding_size)) 
l_dec_lstm = LSTM(encoding_size, return_sequences=False, stateful=True, dropout=0.2) 
l_dec_dense = Dense(embedding_size, activation="softmax") 


t_enc_out = l_enc_lstm(l_enc_input) 
state = t_enc_out[1:] 

t_dec_out = l_dec_dense(l_dec_lstm(l_dec_input, initial_state=state)) 

model_train = Model(inputs=[l_enc_input, l_dec_input], outputs=[t_dec_out]) 
model_train.compile(optimizer="adam", loss="categorical_crossentropy") 

答えて

0

seq2seq /オートエンコーダは、入力と出力を生成デコーダを処理エンコーダから成ります。トレーニングの間、エンコーダに入力が与えられ、エンコーダの出力がデコーダに供給される。目標は、デコーダの出力を入力に近づけることです。これは、デコーダの出力と入力との間の損失を計算する方法です。高レベルの擬似コードで

xを入力とします。

希望します。

hereという大きな説明があります。 また、ウィキペディアpageは非常に詳細です。

+0

コードでは、エンコーダ**の**出力**はデコーダには提供されていません**。エンコーダLSTMの**内部状態**のみがデコーダLSTMの初期状態として設定されます。これが私が混乱している理由、エンコーダの重み付けの更新方法です。 –

関連する問題