TensorFlow:在另一个LSTM之上的LSTM

3

作为介绍,没有太多可说的:我想在TensorFlow中将LSTM堆叠在另一个LSTM上,但一直被我无法理解,更不用说单独解决的错误所阻止。

以下是代码:

def RNN(_X, _istate, _istate_2, _weights, _biases):

    _X = tf.transpose(_X, [1, 0, 2])  
    _X = tf.reshape(_X, [-1, rozmiar_wejscia]) 
    _X = tf.matmul(_X, _weights['hidden']) + _biases['hidden']

    lstm_cell = rnn_cell.BasicLSTMCell(ukryta_warstwa, forget_bias=1.0)
    _X = tf.split(0, liczba_krokow, _X)

    outputs, states = rnn.rnn(lstm_cell, _X, initial_state=_istate)


    lstm_cell_2 = rnn_cell.BasicLSTMCell(ukryta_warstwa, forget_bias = 1.0)
    outputs2, states2 = rnn.rnn(lstm_cell_2, outputs, initial_state = _istate_2)

    return tf.matmul(outputs2[-1], _weights['out']) + _biases['out']

我一直收到的是:

ValueError: Variable RNN/BasicLSTMCell/Linear/Matrix already exists, disallowed. Did you mean to set reuse=True in VarScope? 

指向具有outputs2、states2的行

重置图表对解决问题没有丝毫帮助。如果需要其他信息来帮助解决问题,我将非常乐意提供。


另外还可以看一下MultiRNNCell,它允许您堆叠LSTM单元并满足您的要求:https://www.tensorflow.org/versions/r0.9/api_docs/python/rnn_cell.html#MultiRNNCell - Avishkar Bhoopchand
可能是Tensorflow:variable_scope的值错误的重复问题。 - Franck Dernoncourt
1个回答

2
TensorFlow的RNN代码使用"变量作用域"来管理变量的创建和共享,在这种情况下,它无法确定您是要为第二个RNN创建一个新的变量集,还是重用旧的变量集。
假设您希望两个RNN的权重是独立的,您可以通过将每个RNN包装在不同命名的with tf.variable_scope(name):块中来解决此错误,如下所示:
# ...
with tf.variable_scope("first_lstm"):
  lstm_cell = rnn_cell.BasicLSTMCell(ukryta_warstwa, forget_bias=1.0)
  _X = tf.split(0, liczba_krokow, _X)

  outputs, states = rnn.rnn(lstm_cell, _X, initial_state=_istate)

with tf.variable_scope("second_lstm"):
  lstm_cell_2 = rnn_cell.BasicLSTMCell(ukryta_warstwa, forget_bias=1.0)
  outputs2, states2 = rnn.rnn(lstm_cell_2, outputs, initial_state=_istate_2)
# ...

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接