【发布时间】:2017-05-29 21:56:46
【问题描述】:
我有 TensorFlow 1.1.0
我正在学习来自 https://github.com/ageron/handson-ml/blob/master/14_recurrent_neural_networks.ipynb 的关于多单元(堆叠)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_rnn_cell/cell_0/basic_rnn_cell”,这次尝试使用范围“rnn/multi_rnn_cell/cell_1/basic_rnn_cell”。如果您希望它使用一组不同的权重,请创建一个新的单元实例。 如果之前使用:MultiRNNCell([BasicRNNCell(...)] * num_layers),则改为:MultiRNNCell([BasicRNNCell(...) for _ in range(num_layers)])。 如果在您使用相同的单元实例作为双向 RNN 的正向和反向单元之前,只需创建两个实例(一个用于正向,一个用于反向)。在 2017 年 5 月,我们将开始将此单元格的行为转换为使用现有存储的权重(如果有),当它以 scope=None 调用时(这可能导致静默模型退化,因此该错误将一直存在到那时。)
我将我从 Github 中的代码切换到的部分加粗。 关于为什么这仍然会引发错误的任何想法? 非常感谢您的帮助!
【问题讨论】:
标签: tensorflow recurrent-neural-network