83. 深度循环神经网络及代码实现

1. 回顾:循环神经网络

在这里插入图片描述

2. 更深

在这里插入图片描述

再看公式:

在这里插入图片描述

3. 总结

  • 深度循环神经网络使用多个隐藏层来获得更多的非线性性

4. 代码简洁实现

实现多层循环神经网络所需的许多逻辑细节在高级API中都是现成的。 简单起见,我们仅示范使用此类内置函数的实现方式。 以长短期记忆网络模型为例, 该代码与之前在 sec_lstm中使用的代码非常相似, 实际上唯一的区别是我们指定了层的数量, 而不是使用单一层这个默认值。 像往常一样,我们从加载数据集开始。

import torch
from torch import nn
from d2l import torch as d2l

batch_size, num_steps = 32, 35
train_iter, vocab = d2l.load_data_time_machine(batch_size, num_steps)

像选择超参数这类架构决策也跟 sec_lstm中的决策非常相似。 因为我们有不同的词元,所以输入和输出都选择相同数量,即vocab_size。 隐藏单元的数量仍然是 256 。 唯一的区别是,我们现在(通过num_layers的值来设定隐藏层数)。

vocab_size, num_hiddens, num_layers = len(vocab), 256, 2
num_inputs = vocab_size
device = d2l.try_gpu()
lstm_layer = nn.LSTM(num_inputs, num_hiddens, num_layers)
model = d2l.RNNModel(lstm_layer, len(vocab))
model = model.to(device)

4.1 训练与预测

由于使用了长短期记忆网络模型来实例化两个层,因此训练速度被大大降低了。

num_epochs, lr = 500, 2
d2l.train_ch8(model, train_iter, vocab, lr*1.0, num_epochs, device)

运行结果:

在这里插入图片描述

5. Q&A

Q1:深层RNN,是不是每层都需要一个初始hidden state?

A1:是的,每一层都带了自己的初始状态,都带了weight。

猜你喜欢

转载自blog.csdn.net/weixin_47505105/article/details/128726634
今日推荐