当前位置: 首页 > news >正文

9-3 深度循环神经网络

到目前为止,我们只讨论了具有一个单向隐藏层的循环神经网络。 其中,隐变量和观测值与具体的函数形式的交互方式是相当随意的。 只要交互类型建模具有足够的灵活性,这就不是一个大问题。 然而,对一个单层来说,这可能具有相当的挑战性。 之前在线性模型中,我们通过添加更多的层来解决这个问题。 而在循环神经网络中,我们首先需要确定如何添加更多的层, 以及在哪里添加额外的非线性,因此这个问题有点棘手。

事实上,我们可以将多层循环神经网络堆叠在一起, 通过对几个简单层的组合,产生了一个灵活的机制。 特别是,数据可能与不同层的堆叠有关。 例如,我们可能希望保持有关金融市场状况 (熊市或牛市)的宏观数据可用, 而微观数据只记录较短期的时间动态。

图9.3.1描述了一个具有 L L L个隐藏层的深度循环神经网络, 每个隐状态都连续地传递到当前层的下一个时间步和下一层的当前时间步。
请添加图片描述

函数依赖关系

请添加图片描述
请添加图片描述

简洁实现

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

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

像选择超参数这类架构决策也跟 9-2节中的决策非常相似。 因为我们有不同的词元,所以输入和输出都选择相同数量,即vocab_size。 隐藏单元的数量仍然是 256 256 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)

训练与预测

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

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

请添加图片描述

小结

  • 在深度循环神经网络中,隐状态的信息被传递到当前层的下一时间步和下一层的当前时间步。

  • 有许多不同风格的深度循环神经网络, 如长短期记忆网络、门控循环单元、或经典循环神经网络。 这些模型在深度学习框架的高级API中都有涵盖。

  • 总体而言,深度循环神经网络需要大量的调参(如学习率和修剪) 来确保合适的收敛,模型的初始化也需要谨慎。

请添加图片描述

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 【微信小程序】全局数据共享 - MobX
  • 如何用Python调用智谱清言api进行智能问答
  • 【Java 设计模式】Business Delegate 模式:简化业务服务交互
  • 磷酸二氢钾溶液净化除杂,除重金属
  • 前端面试手撕题收集(自用)
  • 极狐GitLab 如何管理 Kubernetes 集群?
  • 监控电脑屏幕的软件叫什么?8款好用的监控电脑屏幕的软件推荐!
  • 程序员阿龙定制开发【精选】计算机毕业设计之:基于JAVA问卷调查系统
  • 数据结构(Java实现):链表与LinkedList
  • 无法验证 Anaconda 仓库证书
  • 【系统架构设计】软件架构设计(2)
  • 云计算实训33——高并发负载均衡项目(eleme)
  • linux 工作中常用的命令
  • 标准UEFI Shell命令
  • 【论文笔记】独属于CV的注意力机制CBAM-Convolutional Block Attention Module
  • JS中 map, filter, some, every, forEach, for in, for of 用法总结
  • 【159天】尚学堂高琪Java300集视频精华笔记(128)
  • 002-读书笔记-JavaScript高级程序设计 在HTML中使用JavaScript
  • 77. Combinations
  • android图片蒙层
  • GDB 调试 Mysql 实战(三)优先队列排序算法中的行记录长度统计是怎么来的(上)...
  • java2019面试题北京
  • mockjs让前端开发独立于后端
  • mysql外键的使用
  • SpiderData 2019年2月25日 DApp数据排行榜
  • Spring Boot快速入门(一):Hello Spring Boot
  • vue-loader 源码解析系列之 selector
  • vue中实现单选
  • 手机端车牌号码键盘的vue组件
  • 用 Swift 编写面向协议的视图
  • 国内唯一,阿里云入选全球区块链云服务报告,领先AWS、Google ...
  • ​DB-Engines 12月数据库排名: PostgreSQL有望获得「2020年度数据库」荣誉?
  • # 安徽锐锋科技IDMS系统简介
  • #includecmath
  • #绘制圆心_R语言——绘制一个诚意满满的圆 祝你2021圆圆满满
  • (3) cmake编译多个cpp文件
  • (3)选择元素——(14)接触DOM元素(Accessing DOM elements)
  • (二)Eureka服务搭建,服务注册,服务发现
  • (翻译)Entity Framework技巧系列之七 - Tip 26 – 28
  • (原創) 物件導向與老子思想 (OO)
  • (转)人的集合论——移山之道
  • (转)四层和七层负载均衡的区别
  • .bat批处理(九):替换带有等号=的字符串的子串
  • .htaccess配置常用技巧
  • .Net Core 生成管理员权限的应用程序
  • .Net Framework 4.x 程序到底运行在哪个 CLR 版本之上
  • .net web项目 调用webService
  • .NET设计模式(7):创建型模式专题总结(Creational Pattern)
  • .net用HTML开发怎么调试,如何使用ASP.NET MVC在调试中查看控制器生成的html?
  • /3GB和/USERVA开关
  • @NestedConfigurationProperty 注解用法
  • [ linux ] linux 命令英文全称及解释
  • []利用定点式具实现:文件读取,完成不同进制之间的
  • [20180312]进程管理其中的SQL Server进程占用内存远远大于SQL server内部统计出来的内存...
  • [2024] 十大免费电脑数据恢复软件——轻松恢复电脑上已删除文件