Skip to main content
 首页 » 编程设计

python之在 Tensorflow 中使用两个不同的 LSTM 单元

2024年10月17日29jackei

我正在构建一个神经机器翻译器,我必须使用两个不同的 LSTM 单元(一个用于编码器,一个用于解码器)。

两个单元有不同的形状:

  • 编码器(第一个)输入句子的标记并产生状态向量
  • 解码器(第二个)输入先前的状态向量,以及它自己生成的标记

我在 Tensorflow 中编写了这个,当我运行脚本时,出现了以下错误(在解码器阶段出现):

  outputs, states = tf.nn.rnn(cell_backward, inputs, initial_state=initial_state) 
  File "/usr/local/lib/python2.7/dist-packages/tensorflow/python/ops/rnn.py", line 158, in rnn 
    (output, state) = call_cell() 
  File "/usr/local/lib/python2.7/dist-packages/tensorflow/python/ops/rnn.py", line 145, in <lambda> 
    call_cell = lambda: cell(input_, state) 
  File "/usr/local/lib/python2.7/dist-packages/tensorflow/python/ops/rnn_cell.py", line 520, in __call__ 
    dtype, self._num_unit_shards) 
  File "/usr/local/lib/python2.7/dist-packages/tensorflow/python/ops/rnn_cell.py", line 357, in _get_concat_variable 
    sharded_variable = _get_sharded_variable(name, shape, dtype, num_shards) 
  File "/usr/local/lib/python2.7/dist-packages/tensorflow/python/ops/rnn_cell.py", line 387, in _get_sharded_variable 
    dtype=dtype)) 
  File "/usr/local/lib/python2.7/dist-packages/tensorflow/python/ops/variable_scope.py", line 732, in get_variable 
    partitioner=partitioner, validate_shape=validate_shape) 
  File "/usr/local/lib/python2.7/dist-packages/tensorflow/python/ops/variable_scope.py", line 596, in get_variable 
    partitioner=partitioner, validate_shape=validate_shape) 
  File "/usr/local/lib/python2.7/dist-packages/tensorflow/python/ops/variable_scope.py", line 161, in get_variable 
    caching_device=caching_device, validate_shape=validate_shape) 
  File "/usr/local/lib/python2.7/dist-packages/tensorflow/python/ops/variable_scope.py", line 437, in _get_single_variable 
    name, "".join(traceback.format_list(tb)))) 
ValueError: Variable backward/RNN/LSTMCell/W_0 already exists, disallowed. Did you mean to set reuse=True in VarScope? Originally defined at: 
 
  File "/home/alexis/Documents/NMT/NMT.py", line 88, in dense_to_vector_state 
    outputs, states = tf.nn.rnn(cell_forward, inputs, initial_state=initial_state) 

我如何明确指定我想要创建一个全新的 LSTM 单元?

提前致谢!

亚历克西斯

请您参考如下方法:

使用变量作用域

with tf.variable_scope('enc'): 
  cell_enc = LSTMCell(hidden_size) 
with tf.variable_scope('dec'): 
  cell_dec = LSTMCell(hidden_size)