对 TensorFlow 2 中的堆叠式双向 RNN 感到困惑
Puzzled by stacked bidirectional RNN in TensorFlow 2
我正在学习如何基于 this TensorFlow 2 NMT tutorial 构建 seq2seq 模型,并且我正在尝试通过为编码器和解码器堆叠多个 RNN 层来扩展它。但是,我无法检索对应于编码器隐藏状态的输出。
这是我在编码器中构建堆叠双向 GRUCell
层的代码:
# Encoder initializer
def __init__(self, n_layers, dropout, ...):
...
gru_cells = [layers.GRUCell(units,
recurrent_initializer='glorot_uniform',
dropout=dropout)
for _ in range(n_layers)]
self.gru = layers.Bidirectional(layers.RNN(gru_cells,
return_sequences=True,
return_state=True))
假设以上是正确的,那么我调用我创建的图层:
# Encoder call method
def call(self, inputs, state):
...
list_outputs = self.gru(inputs, initial_state=state)
print(len(list_outputs)) # test
list_outputs
在 n_layers = 1
时的长度为 3,这是根据 的预期行为。当我将 n_layers
增加 1 时,我发现数字输出增加了 2,我认为这是新层的正向和反向最终状态。所以2层-> 5个输出,3层-> 7个输出,等等。但是,我无法弄清楚哪个输出对应于哪个层以及哪个方向。
最终我想知道的是:如何在这个堆叠式双向RNN中获取last层的正向和反向最终状态?如果我正确理解 seq2seq 模型,它们构成了传递给解码器的隐藏状态。
在深入研究 RNN
和 Bidirectional
类 的 TensorFlow 源代码后,我对堆叠式双向 RNN 层的输出格式的最佳猜测是以下 1+2n 元组,其中 n 是堆叠层数:
- [0] RNN 中前向和后向状态的串联
- [1 : len//2 + 1] 前向层的最终状态,从第一层到最后层
- [len//2 + 1:]反向层的最终状态,从第一层到最后层
我正在学习如何基于 this TensorFlow 2 NMT tutorial 构建 seq2seq 模型,并且我正在尝试通过为编码器和解码器堆叠多个 RNN 层来扩展它。但是,我无法检索对应于编码器隐藏状态的输出。
这是我在编码器中构建堆叠双向 GRUCell
层的代码:
# Encoder initializer
def __init__(self, n_layers, dropout, ...):
...
gru_cells = [layers.GRUCell(units,
recurrent_initializer='glorot_uniform',
dropout=dropout)
for _ in range(n_layers)]
self.gru = layers.Bidirectional(layers.RNN(gru_cells,
return_sequences=True,
return_state=True))
假设以上是正确的,那么我调用我创建的图层:
# Encoder call method
def call(self, inputs, state):
...
list_outputs = self.gru(inputs, initial_state=state)
print(len(list_outputs)) # test
list_outputs
在 n_layers = 1
时的长度为 3,这是根据 n_layers
增加 1 时,我发现数字输出增加了 2,我认为这是新层的正向和反向最终状态。所以2层-> 5个输出,3层-> 7个输出,等等。但是,我无法弄清楚哪个输出对应于哪个层以及哪个方向。
最终我想知道的是:如何在这个堆叠式双向RNN中获取last层的正向和反向最终状态?如果我正确理解 seq2seq 模型,它们构成了传递给解码器的隐藏状态。
在深入研究 RNN
和 Bidirectional
类 的 TensorFlow 源代码后,我对堆叠式双向 RNN 层的输出格式的最佳猜测是以下 1+2n 元组,其中 n 是堆叠层数:
- [0] RNN 中前向和后向状态的串联
- [1 : len//2 + 1] 前向层的最终状态,从第一层到最后层
- [len//2 + 1:]反向层的最终状态,从第一层到最后层