美文网首页
深度循环神经网络

深度循环神经网络

作者: 小黄不头秃 | 来源:发表于2022-09-26 01:16 被阅读0次

(一)深度循环神经网络

前面我们讲的RNN, GRU, LSTM都是一个隐藏层。可是一个隐藏层的模型复杂度是不够的,所以说我们需要更深的网络。

我们先回忆一下RNN,他是一层的隐藏层,我们可以通过增加隐藏层的节点数来增加模型的复杂度,但与此同时会带来的问题就是,模型过拟合。而且一层隐藏层没有很好的非线性。

所以他的想法也很好实现,和MLP是没有太大区别的,就是多堆叠几个隐层就好了。

假设在时间步t有一个小批量的输入数据
\mathbf{X}_t \in \mathbb{R}^{n \times d}
(样本数:n,每个样本中的输入数:d)。
同时,将l^\mathrm{th}隐藏层(l=1,\ldots,L
的隐状态设为\mathbf{H}_t^{(l)} \in \mathbb{R}^{n \times h}
(隐藏单元数:h),
输出层变量设为\mathbf{O}_t \in \mathbb{R}^{n \times q}
(输出数:q)。
设置\mathbf{H}_t^{(0)} = \mathbf{X}_t
l个隐藏层的隐状态使用激活函数\phi_l,则:

\mathbf{H}_t^{(l)} = \phi_l(\mathbf{H}_t^{(l-1)} \mathbf{W}_{xh}^{(l)} + \mathbf{H}_{t-1}^{(l)} \mathbf{W}_{hh}^{(l)} + \mathbf{b}_h^{(l)}),

其中,权重\mathbf{W}_{xh}^{(l)} \in \mathbb{R}^{h \times h}
\mathbf{W}_{hh}^{(l)} \in \mathbb{R}^{h \times h}
偏置\mathbf{b}_h^{(l)} \in \mathbb{R}^{1 \times h}
都是第l个隐藏层的模型参数。

最后,输出层的计算仅基于第l个隐藏层最终的隐状态:

\mathbf{O}_t = \mathbf{H}_t^{(L)} \mathbf{W}_{hq} + \mathbf{b}_q,

其中,权重\mathbf{W}_{hq} \in \mathbb{R}^{h \times q}和偏置\mathbf{b}_q \in \mathbb{R}^{1 \times q}都是输出层的模型参数。

(二)代码实现

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

batch_size, num_step = 32, 35

train_iter, vocab = d2l.load_data_time_machine(batch_size, num_step)
x = next(iter(train_iter))[0][:10]
print(x.shape)
# 这个类的参考模型
# class RNNModel(nn.Module):
#     def __init__(self, rnn_layer, vocab_size, **kwargs):
#         super(RNNModel, self).__init__(**kwargs)
#         self.rnn = rnn_layer
#         self.vocab_size = vocab_size
#         self.num_hiddens = self.rnn.hidden_size
#         if not self.rnn.bidirectional:
#             self.num_directions = 1
#             self.linear = nn.Linear(self.num_hiddens, self.vocab_size)
#         else:
#             self.num_directions = 2
#             self.linear = nn.Linear(self.num_hiddens * 2, self.vocab_size)

#     def forward(self, inputs, state):
#         X = F.one_hot(inputs.T.long(), self.vocab_size)
#         X = X.to(torch.float32)
#         Y, state = self.rnn(X, state)
#         # The fully connected layer will first change the shape of `Y` to
#         # (`num_steps` * `batch_size`, `num_hiddens`). Its output shape is
#         # (`num_steps` * `batch_size`, `vocab_size`).
#         output = self.linear(Y.reshape((-1, Y.shape[-1])))
#         return output, state

#     def begin_state(self, device, batch_size=1):
#         if not isinstance(self.rnn, nn.LSTM):
#             # `nn.GRU` takes a tensor as hidden state
#             return  torch.zeros((self.num_directions * self.rnn.num_layers,
#                                  batch_size, self.num_hiddens),
#                                 device=device)
#         else:
#             # `nn.LSTM` takes a tuple of hidden states
#             return (torch.zeros((
#                 self.num_directions * self.rnn.num_layers,
#                 batch_size, self.num_hiddens), device=device),
#                     torch.zeros((
#                         self.num_directions * self.rnn.num_layers,
#                         batch_size, self.num_hiddens), device=device))
# 通过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, vocab_size)
model = model.to(device)
num_epoch = 500
lr = 1
d2l.train_ch8(model, train_iter,vocab, lr, num_epoch, device)

相关文章

  • 深度学习笔记之循环神经网络RNN学习笔记

    关键词:循环神经网络;RNN;深度学习;深度神经网络 循环神经网络 RNN 李宏毅: 机器学习,深度学习的课件参考...

  • Hulu面试题(二)

    9. 循环神经网络 场景描述 循环神经网络(Recurrent Neural Network)是一种主流的深度学习...

  • CNN、RNN、DNN的一般解释

    CNN(卷积神经网络)、RNN(循环神经网络)、DNN(深度神经网络)的内部网络结构有什么区别? 转自知乎 科言君...

  • 2019-02-27 Lstm函数

    tf.contrib.rnn.BasicLSTMCell 深度学习(07)_RNN-循环神经网络-02-Tenso...

  • RNN理解笔记

    在深度学习方面,图像识别、语音识别主要运用卷积神经网络(CNN),而文字语言处理主要运用循环神经网络(RNN) 循...

  • 深度循环神经网络

    (一)深度循环神经网络 前面我们讲的RNN, GRU, LSTM都是一个隐藏层。可是一个隐藏层的模型复杂度是不够的...

  • RNN正向及反向传播

    RNN简介 RNN(循环神经网络)是深度神经网络中,应用最广泛的两种神经网络架构之一。并且,作为一种时序结构的神经...

  • 深度学习-序

    文章列表 (1) 深度学习-感知器(2)线性单元和梯度下降(3)神经网络和反向传播算法(4)卷积神经网络(5)循环...

  • 算法

    CNN 卷积核的深度和输入的深度一致,feature map的深度和卷积核的个数一致 RNN 包括双向循环神经网络...

  • 深度学习爱神经网络卷积神经网络与循环神经网络与序列学习第五期视频

    深度学习爱神经网络卷积神经网络与循环神经网络与序列学习第五期视频教程网盘下载 38套大数据,云计算,架构,数据分析...

网友评论

      本文标题:深度循环神经网络

      本文链接:https://www.haomeiwen.com/subject/cpcyortx.html