1.回顾:循环神经网络
如何将循环神经网络变深,获得更多的非线性性?
通过添加多个隐藏层的方式来实现,每个隐藏状态都连续地传递到当前层地下一个时间步和下一层地当前时间步
2.深度循环网络
①类似于多层感知机,隐藏层数目和隐藏单元数目都是超参数
②使用门控循环单元或长短期记忆网络的隐状态替代上图中深度循环网络的隐状态计算,就能够得到深度门控循环神经网络或长短期记忆神经网络。
【总结】
①深度循环网络使用多个隐藏层来获得更多的非线性
GRU、RNN、LSTM 在结构上都是相同的,只是隐状态 H 的计算方式有区别,所以它们加深神经网络的原理都是相同的
②在深度循环神经网络中,隐状态的信息被传递到当前层的下一时间步和下一层的当前时间步
③存在许多不同风格的深度循环神经网络。如长短期记忆网络、门控循环单元或经典循环神经网络
④深度循环神经网络需要大量的调参(如学习率和修剪)来确保合适的收敛,模型的初始化也需要谨慎
【代码实现】
1.加载数据集
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)
2.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)
3.训练和预测
num_epochs, lr = 500, 2
d2l.train_ch8(model, train_iter, vocab, lr*1.0, num_epochs, device)