关于深度学习:张量流中的多个RNN

Multiple RNN in tensorflow

我正在尝试在TensorFlow中使用不带MultiRNNCell的2层深度RNN,我的意思是将1layer的输出用作2layer的输入,如下所示:

1
2
3
4
cell1 = tf.contrib.rnn.LSTMCell(num_filters, state_is_tuple=True)
rnn_outputs1, _ = tf.nn.dynamic_rnn(cell1, inputs, dtype = tf.float32)
cell2 = tf.contrib.rnn.LSTMCell(num_filters, state_is_tuple=True)
rnn_outputs2, _ = tf.nn.dynamic_rnn(cell2, rnn_outputs1, dtype = tf.float32)

但是出现以下错误:"试图让第二个RNNCell使用已经具有权重的变量作用域的权重"
我不想在cell2中重用cell1的权重,我想要两个不同的层,因为我需要每一层的输出。我该怎么办?


您可以将rnn的结构放入2个不同的变量范围,以确保它们使用不同的内部变量。

例如通过显式地执行

1
2
3
4
5
6
cell1 = tf.contrib.rnn.LSTMCell(num_filters, state_is_tuple=True)
with tf.variable_scope("rnn1"):
    rnn_outputs1, _ = tf.nn.dynamic_rnn(cell1, inputs, dtype = tf.float32)
cell2 = tf.contrib.rnn.LSTMCell(num_filters, state_is_tuple=True)
with tf.variable_scope("rnn2"):
    rnn_outputs2, _ = tf.nn.dynamic_rnn(cell2, rnn_outputs1, dtype = tf.float32)

或使用dynamic_rnn方法的scope自变量:

1
2
3
4
cell1 = tf.contrib.rnn.LSTMCell(num_filters, state_is_tuple=True)
rnn_outputs1, _ = tf.nn.dynamic_rnn(cell1, inputs, dtype=tf.float32, scope='rnn1')
cell2 = tf.contrib.rnn.LSTMCell(num_filters, state_is_tuple=True)
rnn_outputs2, _ = tf.nn.dynamic_rnn(cell2, rnn_outputs1, dtype=tf.float32, scope='rnn2')