Tensorflow 运行 两个 RNN:变量 hidden/RNN/LSTMCell/W_0 已存在
Tensorflow running two RNNs: Variable hidden/RNN/LSTMCell/W_0 already exists
我正在尝试同时 运行 两个 RNN 并将它们的输出连接在一起,方法是为每个 rnn_cell.LSTMCell
定义两个变量范围。为什么我会收到此变量已存在错误?
ValueError: Variable hidden/RNN/LSTMCell/W_0 already exists,
disallowed. Did you mean to set reuse=True in VarScope?
为什么是"hidden/RNN/LSTMCell/W_0"而不是"hidden/forward_lstm_cell/RNN/LSTMCell/W_0"???
with tf.variable_scope('hidden', reuse=reuse): #reuse=None during training
with tf.variable_scope('forward_lstm_cell'):
lstm_fw_cell = tf.nn.rnn_cell.LSTMCell(num_units=self.num_hidden, use_peepholes=False,
initializer=tf.random_uniform_initializer(-0.003, 0.003),
state_is_tuple=True)
if not reuse:
lstm_fw_cell = tf.nn.rnn_cell.DropoutWrapper(cell=lstm_fw_cell, input_keep_prob=0.7)
with tf.variable_scope('backward_lstm_cell'):
lstm_bw_cell = tf.nn.rnn_cell.LSTMCell(num_units=self.num_hidden, use_peepholes=False,
forget_bias=0.0,
initializer=tf.random_uniform_initializer(-0.003, 0.003),
state_is_tuple=True)
if not reuse:
lstm_bw_cell = tf.nn.rnn_cell.DropoutWrapper(cell=lstm_bw_cell, input_keep_prob=0.7)
with tf.name_scope("forward_lstm"):
outputs_fw, output_states_fw = tf.nn.dynamic_rnn(
cell=lstm_fw_cell,
inputs=embed_inputs_fw,
dtype=tf.float32,
sequence_length=self.seq_len_l
)
with tf.name_scope("backward_lstm"):
outputs_bw, output_states_bw = tf.nn.dynamic_rnn(
cell=lstm_bw_cell,
inputs=embed_inputs_bw,
dtype=tf.float32,
sequence_length=self.seq_len_r
)
只需使用 tf.variable_scope
而不是 tf.name_scope
。 tf.name_scope
没有为创建的变量添加前缀 with tf.get_variable()
.
我正在尝试同时 运行 两个 RNN 并将它们的输出连接在一起,方法是为每个 rnn_cell.LSTMCell
定义两个变量范围。为什么我会收到此变量已存在错误?
ValueError: Variable hidden/RNN/LSTMCell/W_0 already exists, disallowed. Did you mean to set reuse=True in VarScope?
为什么是"hidden/RNN/LSTMCell/W_0"而不是"hidden/forward_lstm_cell/RNN/LSTMCell/W_0"???
with tf.variable_scope('hidden', reuse=reuse): #reuse=None during training
with tf.variable_scope('forward_lstm_cell'):
lstm_fw_cell = tf.nn.rnn_cell.LSTMCell(num_units=self.num_hidden, use_peepholes=False,
initializer=tf.random_uniform_initializer(-0.003, 0.003),
state_is_tuple=True)
if not reuse:
lstm_fw_cell = tf.nn.rnn_cell.DropoutWrapper(cell=lstm_fw_cell, input_keep_prob=0.7)
with tf.variable_scope('backward_lstm_cell'):
lstm_bw_cell = tf.nn.rnn_cell.LSTMCell(num_units=self.num_hidden, use_peepholes=False,
forget_bias=0.0,
initializer=tf.random_uniform_initializer(-0.003, 0.003),
state_is_tuple=True)
if not reuse:
lstm_bw_cell = tf.nn.rnn_cell.DropoutWrapper(cell=lstm_bw_cell, input_keep_prob=0.7)
with tf.name_scope("forward_lstm"):
outputs_fw, output_states_fw = tf.nn.dynamic_rnn(
cell=lstm_fw_cell,
inputs=embed_inputs_fw,
dtype=tf.float32,
sequence_length=self.seq_len_l
)
with tf.name_scope("backward_lstm"):
outputs_bw, output_states_bw = tf.nn.dynamic_rnn(
cell=lstm_bw_cell,
inputs=embed_inputs_bw,
dtype=tf.float32,
sequence_length=self.seq_len_r
)
只需使用 tf.variable_scope
而不是 tf.name_scope
。 tf.name_scope
没有为创建的变量添加前缀 with tf.get_variable()
.