IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 人工智能 -> 李沐动手学深度学习V2-深度循环神经网络和代码实现 -> 正文阅读

[人工智能]李沐动手学深度学习V2-深度循环神经网络和代码实现

一. 深度循环神经网络

1. 介绍

与多层感知机一样,循环神经网络也可以将多层循环神经网络堆叠在一起, 通过对几个简单层的组合,产生了一个灵活的机制。 特别是,数据可能与不同层的堆叠有关。 下图所示描述了一个具有 𝐿 个隐藏层的深度循环神经网络, 每个隐状态都连续地传递到当前层的下一个时间步输入和当前层下一层的当前时间步输入。
深度循环神经网络

2. 函数依赖关系

假设在时间步 t t t有一个小批量的输入数据 X t ∈ R n × d \mathbf{X}_t \in \mathbb{R}^{n \times d} Xt?Rn×d(样本数: n n n,每个样本中的输入数: d d d)。同时,将 l t h l^\mathrm{th} lth隐藏层( l = 1 , … , L l=1,\ldots,L l=1,,L)的隐状态设为 H t ( l ) ∈ R n × h \mathbf{H}_t^{(l)} \in \mathbb{R}^{n \times h} Ht(l)?Rn×h(隐藏单元数: h h h),输出层变量设为 O t ∈ R n × q \mathbf{O}_t \in \mathbb{R}^{n \times q} Ot?Rn×q(输出数: q q q)。设置 H t ( 0 ) = X t \mathbf{H}_t^{(0)} = \mathbf{X}_t Ht(0)?=Xt?,第 l l l个隐藏层的隐状态使用激活函数 ? l \phi_l ?l?,则:
H t ( l ) = ? l ( H t ( l ? 1 ) W x h ( l ) + H t ? 1 ( l ) W h h ( l ) + b h ( 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)}), Ht(l)?=?l?(Ht(l?1)?Wxh(l)?+Ht?1(l)?Whh(l)?+bh(l)?),

其中,权重 W x h ( l ) ∈ R h × h \mathbf{W}_{xh}^{(l)} \in \mathbb{R}^{h \times h} Wxh(l)?Rh×h W h h ( l ) ∈ R h × h \mathbf{W}_{hh}^{(l)} \in \mathbb{R}^{h \times h} Whh(l)?Rh×h和偏置 b h ( l ) ∈ R 1 × h \mathbf{b}_h^{(l)} \in \mathbb{R}^{1 \times h} bh(l)?R1×h都是第 l l l个隐藏层的模型参数。
最后,当前时刻t下输出层的计算仅基于第 l l l个(最后一个隐藏层)隐藏层最终的隐状态:

O t = H t ( L ) W h q + b q , \mathbf{O}_t = \mathbf{H}_t^{(L)} \mathbf{W}_{hq} + \mathbf{b}_q, Ot?=Ht(L)?Whq?+bq?,
其中,权重 W h q ∈ R h × q \mathbf{W}_{hq} \in \mathbb{R}^{h \times q} Whq?Rh×q和偏置 b q ∈ R 1 × q \mathbf{b}_q \in \mathbb{R}^{1 \times q} bq?R1×q都是输出层的模型参数。

与多层感知机一样,隐藏层数目 L L L和隐藏单元数目 h h h都是超参数,可以由我们调整的。另外用门控循环单元或长短期记忆网络的隐状态
来代替RNN中的隐状态进行计算,可以很容易地得到深度门控循环神经网络或深度长短期记忆神经网络。

3. 实现

实现多层循环神经网络所需的许多逻辑细节在Pytorch高级API中都是现成的。 简单起见使用高级API函数的实现方式,以长短期记忆网络模型为例, 该代码与前一篇LSTM中使用的代码非常相似, 实际上唯一的区别是我们指定了层的数量, 而不是使用单一层这个默认值,首先进行数据集加载:

import torch
import d2l.torch
from torch import nn
batch_size,num_steps = 32,35
train_iter,vocab = d2l.torch.load_data_time_machine(batch_size,num_steps)

输入和输出选择相同数量即vocab_size,隐藏单元的数量仍然是 256 ,通过num_layers的值来设定隐藏层数。

vocab_size,num_hiddens,num_layers = len(vocab),256,2 #num_layers=2表示LSTM网络有两层隐藏层
input_size = vocab_size
device = d2l.torch.try_gpu()
deep_lstm = nn.LSTM(input_size,num_hiddens,num_layers=num_layers) #num_layers=2表示LSTM网络有两层隐藏层
model = d2l.torch.RNNModel(deep_lstm,vocab_size)
model = model.to(device)

由于使用了长短期记忆网络模型来实例化两个层,因此训练速度被大大降低了,训练和预测结果如下图所示。

num_epochs,lr = 500,2
d2l.torch.train_ch8(model,train_iter,vocab,lr,num_epochs,device,use_random_iter=False)

深度LSTM训练和预测结果

4. 小结

  • 在深度循环神经网络中,隐状态的信息被传递到当前层的下一时间步和下一层的当前时间步。
  • 有许多不同风格的深度循环神经网络,如长短期记忆网络、门控循环单元、或经典循环神经网络。 这些模型在深度学习框架的高级API中都有涵盖。
  • 总体而言,深度循环神经网络需要大量的调参(如学习率和隐藏层单元数等)来确保合适的收敛,模型的初始化也需要谨慎。

5. 全部代码

import torch
import d2l.torch
from torch import nn

batch_size, num_steps = 32, 35
train_iter, vocab = d2l.torch.load_data_time_machine(batch_size, num_steps)
vocab_size, num_hiddens, num_layers = len(vocab), 256, 2  #num_layers=2表示LSTM网络有两层隐藏层
input_size = vocab_size
device = d2l.torch.try_gpu()
deep_lstm = nn.LSTM(input_size, num_hiddens, num_layers=num_layers)  #num_layers=2表示LSTM网络有两层隐藏层
model = d2l.torch.RNNModel(deep_lstm, vocab_size)
model = model.to(device)
num_epochs, lr = 500, 2
d2l.torch.train_ch8(model, train_iter, vocab, lr, num_epochs, device, use_random_iter=False)

6. 链接

循环神经网络RNN第一篇:李沐动手学深度学习V2-NLP序列模型和代码实现
循环神经网络RNN第二篇:李沐动手学深度学习V2-NLP文本预处理和代码实现
循环神经网络RNN第三篇:李沐动手学深度学习V2-NLP语言模型、数据集加载和数据迭代器实现以及代码实现
循环神经网络RNN第四篇:李沐动手学深度学习V2-RNN原理
循环神经网络RNN第五篇:李沐动手学深度学习V2-RNN循环神经网络从零实现
循环神经网络RNN第六篇:李沐动手学深度学习V2-使用Pytorch框架实现RNN循环神经网络
循环神经网络GRU第七篇:李沐动手学深度学习V2-GRU门控循环单元以及代码实现
循环神经网络LSTM第八篇:李沐动手学深度学习V2-LSTM长短期记忆网络以及代码实现
深度循环神经网络第九篇:李沐动手学深度学习V2-深度循环神经网络和代码实现
双向循环神经网络第十篇:李沐动手学深度学习V2-双向循环神经网络Bidirectional RNN和代码实现

  人工智能 最新文章
2022吴恩达机器学习课程——第二课(神经网
第十五章 规则学习
FixMatch: Simplifying Semi-Supervised Le
数据挖掘Java——Kmeans算法的实现
大脑皮层的分割方法
【翻译】GPT-3是如何工作的
论文笔记:TEACHTEXT: CrossModal Generaliz
python从零学(六)
详解Python 3.x 导入(import)
【答读者问27】backtrader不支持最新版本的
上一篇文章      下一篇文章      查看所有文章
加:2022-07-04 22:54:12  更:2022-07-04 22:54:45 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 0:55:52-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码