【发布时间】:2017-10-19 10:39:19
【问题描述】:
我花了几天时间试图弄清楚发生了什么,但我仍然收到此错误。这是我得到的错误
ValueError:变量 rnn/multi_rnn_cell/cell_1/basic_lstm_cell/weights 不存在,或者不是用 tf.get_variable() 创建的。你是否 意思是在 VarScope 中设置reuse=None?
这是我的示例代码,有谁知道我做错了什么?
x = tf.placeholder(tf.float32,[None,n_steps,n_input])
y = tf.placeholder(tf.float32,[None,n_classes])
weights = {
'out': tf.Variable(tf.random_normal([n_hidden, n_classes]))
}
biases = {
'out': tf.Variable(tf.random_normal([n_classes]))
}
def RNN(x, weights, biases):
x = tf.unstack(x, n_steps, 1)
lstm_cell = rnn.MultiRNNCell([cell() for y in range(2)] , state_is_tuple=True)
# Get lstm cell output
outputs, states = rnn.static_rnn(lstm_cell, x, dtype=tf.float32)
# Linear activation, using rnn inner loop last output
return tf.matmul(outputs[-1], weights['out']) + biases['out']
def cell():
return rnn.BasicLSTMCell(n_hidden,forget_bias=0.1, reuse=True)
pred = RNN(x, weights, biases)
【问题讨论】:
-
你想用
tf.variable_scope(...)做什么?您是否尝试重用两个 LSTM 单元中的权重?在这种情况下,您应该只重用相同的单元格对象。否则,只需删除tf.variable_scope,因为它会混淆 TF(您在同一变量范围的两个实例下创建操作,这会导致命名不一致,例如参见 here)。 -
谢谢,@jdehesa 我试过没有它,但它仍然在抱怨同样的问题。我已经编辑了我的问题。
-
啊,等等,我没看到你在单元格中使用了
reuse=True。这需要您事先创建必要的变量(或通过事先调用static_rnn/dynamic_rnn来创建它们)。如果您真的想重用权重,如果可能的话,通常更容易重用相同的单元格对象(即创建一个并将包含两个引用的列表传递给MultiRNNCell)。如果您不想重复使用权重,请不要传递reuse=True。 -
您能否按照您认为可行的方式修改代码来回答这个问题?
-
我仍然不清楚你是否真的想重用 LSTM 单元中的权重,每种情况的答案都不一样。
标签: tensorflow lstm