【问题标题】:How to reuse the weights in Tensorflow?如何重用 Tensorflow 中的权重?
【发布时间】:2017-04-28 23:46:01
【问题描述】:

我会多次调用下面的tensorflow代码。权重会被重复使用还是每次都会创建一个新图表?

    def lstm(encoder_cell, encoder_inputs_embedded, encoder_inputs_length):
        with tf.variable_scope('lstm') as scope_bilstm:
            ((encoder_fw_outputs,
              encoder_bw_outputs),
             (encoder_fw_state,
              encoder_bw_state)) = (
                tf.nn.bidirectional_dynamic_rnn(cell_fw=encoder_cell,
                                                cell_bw=encoder_cell,
                                                inputs=encoder_inputs_embedded,
                                                sequence_length=encoder_inputs_length,
                                                time_major=False,
                                                dtype=tf.float32)
                )

        encoder_outputs = tf.concat((encoder_fw_outputs, encoder_bw_outputs), 2)

        return encoder_outputs

因为我知道它可能不会被重复使用,所以我尝试了以下代码,在tf.variable_scope() 中添加了一个额外的reuse=True

    def lstm(encoder_cell, encoder_inputs_embedded, encoder_inputs_length):
        with tf.variable_scope('lstm', reuse=True) as scope_bilstm:
            ((encoder_fw_outputs,
              encoder_bw_outputs),
             (encoder_fw_state,
              encoder_bw_state)) = (
                tf.nn.bidirectional_dynamic_rnn(cell_fw=encoder_cell,
                                                cell_bw=encoder_cell,
                                                inputs=encoder_inputs_embedded,
                                                sequence_length=encoder_inputs_length,
                                                time_major=False,
                                                dtype=tf.float32)
                )

        encoder_outputs = tf.concat((encoder_fw_outputs, encoder_bw_outputs), 2)

        return encoder_outputs

但我收到以下错误,

ValueError: 变量 inner/bidirectional_rnn/fw/lstm_cell/weights 确实 不存在,或者不是用 tf.get_variable() 创建的。你的意思是 在 VarScope 中设置重用=无?

我该如何解决这个错误?我真的很感激!

scope_bilstm.reuse_variables() 呢?我不知道在我的程序中插入该行的什么位置。

【问题讨论】:

  • 我的理解是第一次定义变量时,应该在没有reuse=True的范围内。第一次初始化后,可以使用scope.reuse_variables()将范围设置为重用。

标签: python tensorflow deep-learning


【解决方案1】:

可能有用,看load_with_skip函数中的this

【讨论】:

    猜你喜欢
    • 2017-07-30
    • 2018-08-25
    • 1970-01-01
    • 2018-02-02
    • 2017-03-17
    • 1970-01-01
    • 1970-01-01
    • 2018-12-05
    • 1970-01-01
    相关资源
    最近更新 更多