如何保存 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)

这里的检查点文件应该是您的确切检查点文件。所以当 运行 发生的事情是它只会恢复你的解码器权重并使用主模型进行训练。