如何保存 tensorflow dynamic_rnn 模型并将它们恢复为新 encoder-decoder 模型中的解码器?
How to save tensorflow dynamic_rnn model and restore them as an decoder in a new encoder-decoder model?
我正在尝试训练一个 encoder-decoder 模型来自动生成摘要。编码器部分使用 CNN 对文章的摘要进行编码。解码器部分是RNN来生成文章标题。
所以骨架看起来像:
encoder_state = CNNEncoder(encoder_inputs)
decoder_outputs, _ = RNNDecoder(encoder_state,decoder_inputs)
但我想 pre-trained 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
所以我关心的是如何将save和restore RNNDecoder部分分开保存?
这里可以先取动态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 创建一个 softmax 损失并以正常方式训练它。
当你想在session中恢复你这种方法的参数时
with tf.Session() as session:
saver = tf.train.Saver()
saver.restore(session, checkpoint_file)
这里的检查点文件应该是您的确切检查点文件。所以当 运行 发生的事情是它只会恢复你的解码器权重并使用主模型进行训练。
我正在尝试训练一个 encoder-decoder 模型来自动生成摘要。编码器部分使用 CNN 对文章的摘要进行编码。解码器部分是RNN来生成文章标题。
所以骨架看起来像:
encoder_state = CNNEncoder(encoder_inputs)
decoder_outputs, _ = RNNDecoder(encoder_state,decoder_inputs)
但我想 pre-trained 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
所以我关心的是如何将save和restore RNNDecoder部分分开保存?
这里可以先取动态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 创建一个 softmax 损失并以正常方式训练它。
当你想在session中恢复你这种方法的参数时
with tf.Session() as session:
saver = tf.train.Saver()
saver.restore(session, checkpoint_file)
这里的检查点文件应该是您的确切检查点文件。所以当 运行 发生的事情是它只会恢复你的解码器权重并使用主模型进行训练。