Tensorflow 1.1错误:尝试使用与第一次使用不同的变量范围重用RNNCell

时间:2017-05-19 15:05:57

标签: tensorflow deep-learning python-3.5 tensorflow-gpu

我正在尝试运行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的版本不同,我创建了一个新帖子。

0 个答案:

没有答案