我正在尝试运行Tensorflow网站上的seq2seq translate example并收到以下错误消息。我正在使用tensorflow-gpu==1.1.0
ValueError:尝试重用RNNCell 具有与其首次使用不同的可变范围。 细胞的首次使用是在范围内 ' embedding_attention_seq2seq / embedding_attention_decoder / attention_decoder / gru_cell&#39 ;, 这种尝试是使用范围< embedding_attention_seq2seq / rnn / gru_cell'。 如果您希望使用单元格,请创建单元格的新实例 不同的权重集。如果在使用之前: MultiRNNCell([GRUCell(...)] * num_layers),更改为: MultiRNNCell([GRUCell(...)for _ in range(num_layers)])。如果之前 你正在使用相同的单元格实例作为正向和反向 双向RNN的小区,只需创建两个实例(一个用于 前进,一个反向)。 2017年5月,我们将开始转型 此单元格在使用现有存储权重(如果有)时的行为 使用scope = None调用(这可能导致静默模型降级, 所以这个错误将一直存在。)
在github上,人们建议更改将reuse
参数添加到单元格中,如下所示:
def single_cell():
return tf.contrib.rnn.GRUCell(size, reuse = tf.get_variable_scope().reuse)
if use_lstm:
def single_cell():
return tf.contrib.rnn.BasicLSTMCell(size, reuse = tf.get_variable_scope().reuse)
cell = single_cell()
if num_layers > 1:
cell = tf.contrib.rnn.MultiRNNCell([single_cell() for _ in range(num_layers)])
但我仍然得到同样的错误。问题是什么以及如何解决? 任何帮助都非常感谢。
P.S:在stackoverflow上有一个类似的帖子,但是这个解决方案对我不起作用,因为TF的版本不同,我创建了一个新帖子。