【发布时间】: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