带Tensorflow的多小区错误

带Tensorflow的多小区错误,tensorflow,recurrent-neural-network,Tensorflow,Recurrent Neural Network,我有Tensorflow 1.1.0 我正在学习多小区(堆叠式)RNN的基础教程 下面的代码生成了一个奇怪的错误,我无法从搜索中找出原因 import tensorflow as tf n_inputs = 2 n_neurons = 100 n_layers = 3 n_steps = 5 X = tf.placeholder(tf.float32, [None, n_steps, n_inputs]) basic_cell = tf.contrib.rnn.BasicRNNCell(num

我有Tensorflow 1.1.0

我正在学习多小区(堆叠式)RNN的基础教程

下面的代码生成了一个奇怪的错误,我无法从搜索中找出原因

import tensorflow as tf
n_inputs = 2
n_neurons = 100
n_layers = 3
n_steps = 5

X = tf.placeholder(tf.float32, [None, n_steps, n_inputs])
basic_cell = tf.contrib.rnn.BasicRNNCell(num_units=n_neurons)
multi_layer_cell = tf.contrib.rnn.MultiRNNCell([basic_cell for _ in range(n_layers)])
outputs, states = tf.nn.dynamic_rnn(multi_layer_cell, X, dtype=tf.float32)
init = tf.global_variables_initializer()
这似乎是正确的代码,但出现了错误:

ValueError:尝试使用不同于第一次使用的变量范围重新使用RNNCell。单元格的首次使用是在作用域“rnn/multi\N\U cell/cell\U 0/basic\U rnn\U cell”中,这一尝试是在作用域“rnn/multi\U rnn\U cell/cell\U 1/basic\U rnn\U cell”中进行的。如果希望单元格使用不同的权重集,请创建一个新的单元格实例如果在使用:MultirNcell([BasicRNNCell(…)]*num_层)之前,请更改为:MultirNcell([BasicRNNCell(…)表示范围内的(num_层)]。如果在使用与双向RNN的正向和反向单元格相同的单元格实例之前,只需创建两个实例(一个用于正向,一个用于反向)。2017年5月,当使用scope=None调用该单元时,我们将开始转换该单元的行为以使用现有存储的权重(如果有的话)(这可能会导致静默模型降级,因此该错误将一直保持到那时)

我在Github中的代码中用粗体标出了切换到的部分。 你知道为什么这仍然是一个错误吗? 非常感谢您的帮助

在这一行代码中:

multi_layer_cell = tf.contrib.rnn.MultiRNNCell([basic_cell for _ in range(n_layers)])
基本单元变量需要替换为函数。使用变量时,n_layers网络的每一层将使用相同的权重集。相反,尝试使用函数:

def create_rnn_layer(n_neurons):
    return tf.contrib.rnn.BasicRNNCell(num_units=n_neurons)
然后用创建层(n个神经元)替换基本单元。这样,当创建网络时。函数将被多次调用n_层,因此将使用不同的权重