"Variable weights already exists" 教程中的 RNN 示例代码
"Variable weights already exists" in RNN sample code from tutorial
我想从 https://www.tensorflow.org/api_docs/python/tf/contrib/rnn/static_rnn 重新实现 RNN 步进循环
但它对我不起作用。
我在没有重用的情况下得到 "Variable test/basic_lstm_cell/weights already exists",在重用设置为 True 时得到 "Variable test/basic_lstm_cell/weights does not exist"。
import tensorflow as tf
batch_size = 32
n_steps = 10
lstm_size = 10
n_input = 17
words = tf.placeholder(tf.float32, [batch_size, n_steps, n_input])
words = tf.transpose(words, [1, 0, 2])
words = tf.reshape(words, [-1, n_input])
words = tf.split(words, n_steps, 0)
with tf.variable_scope('test', reuse=True):
cell = tf.contrib.rnn.BasicLSTMCell(lstm_size)
state = cell.zero_state(batch_size, dtype=tf.float32)
outputs = []
for input_ in words:
output, state = cell(input_, state)
outputs.append(output)
看看the source of the function you are trying to re-implement。重要的一点是重用标志没有在循环的第一次迭代中设置,但在所有其他迭代中设置。所以在你的情况下,一个包含范围标志常量的循环的范围将不起作用,你必须做类似
的事情
with tf.variable_scope('test') as scope:
cell = tf.contrib.rnn.BasicLSTMCell(lstm_size)
state = cell.zero_state(batch_size, dtype=tf.float32)
outputs = []
for step, input_ in enumerate(words):
if step > 0:
scope.reuse_variables()
output, state = cell(input_, state)
outputs.append(output)
我想从 https://www.tensorflow.org/api_docs/python/tf/contrib/rnn/static_rnn 重新实现 RNN 步进循环 但它对我不起作用。 我在没有重用的情况下得到 "Variable test/basic_lstm_cell/weights already exists",在重用设置为 True 时得到 "Variable test/basic_lstm_cell/weights does not exist"。
import tensorflow as tf
batch_size = 32
n_steps = 10
lstm_size = 10
n_input = 17
words = tf.placeholder(tf.float32, [batch_size, n_steps, n_input])
words = tf.transpose(words, [1, 0, 2])
words = tf.reshape(words, [-1, n_input])
words = tf.split(words, n_steps, 0)
with tf.variable_scope('test', reuse=True):
cell = tf.contrib.rnn.BasicLSTMCell(lstm_size)
state = cell.zero_state(batch_size, dtype=tf.float32)
outputs = []
for input_ in words:
output, state = cell(input_, state)
outputs.append(output)
看看the source of the function you are trying to re-implement。重要的一点是重用标志没有在循环的第一次迭代中设置,但在所有其他迭代中设置。所以在你的情况下,一个包含范围标志常量的循环的范围将不起作用,你必须做类似
的事情with tf.variable_scope('test') as scope:
cell = tf.contrib.rnn.BasicLSTMCell(lstm_size)
state = cell.zero_state(batch_size, dtype=tf.float32)
outputs = []
for step, input_ in enumerate(words):
if step > 0:
scope.reuse_variables()
output, state = cell(input_, state)
outputs.append(output)