2017-06-06 4 views
0

私は、要約を自動的に生成するためにエンコーダ/デコーダモデルを訓練しようとしています。エンコーダ部はCNNを使用して記事の要約をエンコードします。デコーダ部分は記事のタイトルを生成するRNNである。tensorflow dynamic_rnnモデルを保存して新しいエンコーダ/デコーダモデルのデコーダとして復元する方法はありますか?

のでスケルトンは次のようになります。

encoder_state = CNNEncoder(encoder_inputs) 
decoder_outputs, _ = RNNDecoder(encoder_state,decoder_inputs) 

しかし、私が最初に話す方法を学ぶためにモデルを教えるためにRNNデコーダを事前に訓練したいと思います。デコーダ部分は次のとおりです。

def RNNDecoder(encoder_state,decoder_inputs): 
    decoder_inputs_embedded = tf.nn.embedding_lookup(embeddings, decoder_inputs) 
    #from tensorflow.models.rnn import rnn_cell, seq2seq 
    cell = rnn.GRUCell(memory_dim) 
    decoder_outputs, decoder_final_state = tf.nn.dynamic_rnn(
     cell, decoder_inputs_embedded, 
     initial_state=encoder_state, 
     dtype=tf.float32,scope="plain_decoder1" 
    ) 
    return decoder_outputs, decoder_final_state 

だから私の懸念は別に保存と復元RNNDecoder一部を保存する方法ですか?

+0

RNNデコーダを個別にトレーニングしますか? –

+0

はい、私は別にしたいです。今私はちょうどこの目的を達成するために空の入力をCNNのエンコーダに供給しますが、これはあまり効率的ではないと思います。 –

+0

しかし、エンコーダからデコーダへのコンテキストベクトルを供給する必要はありませんか? –

答えて

1

ここで、ダイナミックRNNの出力を最初に取ることができます。

decoder_cell = tf.contrib.rnn.LSTMCell(decoder_hidden_units) 
decoder_outputs, decoder_final_state = tf.nn.dynamic_rnn(decoder_cell, decoder_inputs_embedded,initial_state=encoder_final_state,dtype=tf.float32, time_major=True, scope="plain_decoder") 

decoder_outputsしてください。次に、softmaxレイヤーを使用して完全に接続します。

decoder_logits = tf.contrib.layers.linear(decoder_outputs, vocab_`size) 

その後、decoder_logitsとソフトマックス損失を作成し、noramal方法でそれを訓練することができます。

あなたはここで

with tf.Session() as session: 
     saver = tf.train.Saver() 
     saver.restore(session, checkpoint_file) 

セッションのパラメータにこのような方法を、あなたを復元したい場合は、チェックポイントファイルは、あなたの正確なチェックポイントファイルでなければなりません。だから、何が起こったのかは、デコーダーの重みを元の状態に戻し、メイン・モデルで訓練するだけです。

+0

ありがとう@Shamane Siriwardhana、こうして私は新しいpyスクリプトでそれらを復元し、それに実際のエンコーダ出力を渡すことができますか? –

+0

デコーダのためだけにすべてのパラメータをリロードする必要がありますか?まあ、それは私のための新しいものです。 tf.train.saverを使用してモデルのパラメータをリロードすることができます。 –

+0

saver.restore(セッション、チェックポイントファイル) –

関連する問題