Python 如何在Tensorflow中实现堆叠RNN?

Python 如何在Tensorflow中实现堆叠RNN?,python,tensorflow,recurrent-neural-network,Python,Tensorflow,Recurrent Neural Network,我想在GPU上使用Tensorflow1.13实现RNN。按照官方的建议,我编写了以下代码以获得RNN单元的堆栈 lstm=[tk.layers.CuDNNLSTM(128)用于范围(2)] 单元格=tk.layers.StackedRNNCells(lstm) 但是,我收到一条错误消息: ValueError:(“所有单元格必须具有state\u size属性。接收的单元格:”,[) 如何更正它?这可能是一个Tensorflow错误,我建议在Github上创建一个问题。但是,如果您想绕过该错

我想在GPU上使用Tensorflow1.13实现RNN。按照官方的建议,我编写了以下代码以获得RNN单元的堆栈

lstm=[tk.layers.CuDNNLSTM(128)用于范围(2)]
单元格=tk.layers.StackedRNNCells(lstm)
但是,我收到一条错误消息:

ValueError:(“所有单元格必须具有
state\u size
属性。接收的单元格:”,[


如何更正它?

这可能是一个Tensorflow错误,我建议在Github上创建一个问题。但是,如果您想绕过该错误,可以使用:

import tensorflow as tf
import tensorflow.keras as tk

lstm = [tk.layers.CuDNNLSTM(128) for _ in range(2)]
stacked_cells = tf.nn.rnn_cell.MultiRNNCell(lstm)

这会起作用,但会给出一个您可以禁止使用的弃用警告。

谢谢@qlzh727。在此,我引述回应:

StackedRNNCells或StackedRNNCells仅适用于单元,而不适用于层。RNN中的单元和层之间的区别在于,单元在整个序列中只处理一个时间步,而层将处理整个序列。您可以将RNN层视为:

以整个时间步长表示的t的
:
输出,状态=单元(输入,状态-1)
如果要将2个LSTM层与cudnn一起堆叠到1.x中,可以执行以下操作:

l1 = tf.layers.CuDNNLSTM(128, return_sequence=True)
l2 = tf.layers.CuDNNLSTM(128)
l1_output = l1(input)
l2_oupput = l2(l1_output) 
在TF2.x中,我们将cudnn和普通实现统一在一起,您可以使用tf.layers.LSTM(128,return_sequence=True)更改上面的示例,如果可用,它将使用cudnn impl