【问题标题】:How to restore an LSTM layer如何恢复 LSTM 层
【发布时间】:2017-07-17 22:12:49
【问题描述】:

如果我能在保存和恢复 LSTM 方面得到一些帮助,我将不胜感激。

我有这个 LSTM 层 -

# LSTM cell
cell = tf.contrib.rnn.LSTMCell(n_hidden)
output, current_state = tf.nn.dynamic_rnn(cell, word_vectors, dtype=tf.float32)

outputs = tf.transpose(output, [1, 0, 2])
last = tf.gather(outputs, int(outputs.get_shape()[0]) - 1)

# Saver function
saver = tf.train.Saver()
saver.save(sess, 'test-model')

saver 保存模型并允许我保存和恢复 LSTM 的权重和偏差。但是,我需要恢复这个 LSTM 层并为其提供一组新的输入。

要恢复整个模型,我在做:

with tf.Session() as sess:
    saver = tf.train.import_meta_graph('test-model.meta')
    saver.restore(sess, tf.train.latest_checkpoint('./'))
  1. 我是否可以使用预训练的权重和偏差来初始化 LSTM 单元?

  2. 如果没有,如何恢复这个 LSTM 层?

非常感谢!

【问题讨论】:

    标签: tensorflow


    【解决方案1】:

    您已经在加载模型以及模型的权重。您需要做的就是使用get_tensor_by_name 从图中获取任何张量并将其用于推理。

    例子:

    with tf.Session() as sess:
        saver = tf.train.import_meta_graph('test-model.meta')
        saver.restore(sess, tf.train.latest_checkpoint('./'))
    
       # Get the tensors by their variable name
       word_vec = = detection_graph.get_tensor_by_name('word_vec:0')
       output_tensor = detection_graph.get_tensor_by_name('outputs:0')
    
       sess.run(output_tensor, feed_dict={word_vec: ...}) 
    

    在上面的示例中,word_vecoutputs 是在创建图期间分配给张量的名称。确保你指定了名字,以便他们可以通过他们的名字来称呼他们。

    【讨论】:

    • 非常感谢您回答我的问题!对此,我真的非常感激。所以我不需要再次通过 LSTM 传递word_vec 吗?这究竟是如何工作的?
    • 这只是一个例子,您应该通过 feed_dict 传递您在图表中定义的输入。
    猜你喜欢
    • 2019-01-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-14
    • 1970-01-01
    • 2020-10-28
    • 1970-01-01
    • 2019-09-07
    相关资源
    最近更新 更多