【Python机器学习】循环神经网络(RNN)——超参数

几乎所有模型都可以根据数据和样本进行调整,它们都有各自的优势和相应的利弊权衡方式。寻找最优超参数集通常是一个棘手的问题,但是人类的直觉和经验可以为我们提供解决问题的方法。比如之前的例子:

#设置任意输入序列的最大长度
maxlen=100
#预训练的Word2vec模型维度
embedding_dims=300
#在进行反向传播算法之前要通过并聚合误差的样本序列的算法
batch_size=32
#训练周期个数
epochs=2
#隐藏层的复杂度
num_neurons=50

maxlen参数设置可能是这串参数中最大的问题。训练集在样本长度上变化很大。当我们强制将长度不超过100个词条的样本加上到400个词条,那么将1000个词条的样本截断到400个词条时,就会引入大量的噪声。改变这个数字对训练时间的影响比改变模型中的其他任何参数的影响都要打,单个样本的长度决定了误差需要再多长时刻内反向传播。对于循环神经网络,设置样本长度不是严格必要的。我们可以简单地将网络展开为样本所需的大小,在刚刚的例子中这种做法是必要的,因为我们把本身就是一个序列的输出传递到一个前馈层,而前馈层需要同样输出的大小。

embedding_dims值是由选择的Word2vec模型决定的,但是它应该是可以充分表示数据集的值。即使是像语料库中最常见的50个词条的独热编码这样简单的向量,可能也足以获得精确地预测。

与所有网络一样,增加batch_size可以加速训练,因为它减少了需要反向传播的次数(也就是计算上开销较大的部分)。折中的结果是,更大的批量增加了在局部极小值处停顿下来的可能。

epochs参数易于测试盒调优,只需再次运行训练过程即可。但是如果我们必须从头开始尝试每个新的epochs参数,那么就需要很多的耐心。Keras模型可以重新启动训练,并从停止的地方继续,只要我们在“停止”处保存了模型即可。要在以前训练过的模型上重新启动训练,要重新加载该模型盒数据集,并对数据调用model.fit()。Keras不会重新初始化权重,而是像从未停止过一般继续训练。

另一种对epochs参数进行调优的方法是添加一个名为EarlyStopping的Keras回调方法。通过向模型提供此方法,除非传递给EarlyStopping的度量指标超过了在回调方法中用于触发的某个阈值,否则模型将继续训练,直到达到我们锁清秋的周期数为止。一个常见的早停度量指标是连续几个周期验证精确率提高值。如果模型没有变得更好,通常就意味着是时候“断线”(断开链接)了。这个度量指标允许我们设置它并忘记它的存在。当模型达到我们的度量指标时,模型将停止训练。

num_neurous是一个重要的参数,上面建议随意地使用50个神经元。现在用100个神经元来进行训练和测试:

num_neurons=100
model=Sequential()
model.add(SimpleRNN(num_neurons,return_sequences=True,input_shape=(maxlen,embedding_dims)
))
model.add(Dropout(0.2))
model.add(Flatten())
model.add(Dense(1,activation='sigmoid'))
model.compile('rmsprop','binary_crossentropy',metrics=['accuracy'])
model.summary()

model.fit(X_train,y_train,batch_size=batch_size,epochs=epochs,validation_data=(X_test,y_test))

model_strucure=model.to_json()
with open('simplernn_model2.json','w') as json_file:json_file.write(model_strucure)
model.save_weights('simplernn_weights2.h5')

上述更大的网络相当于在num_neurous=50的网络的其中一层将模型的复杂度提高了一杯,其验证准确率为64.06%,仅提高一点点。这个微不足道的提高会让人觉得模型(对于这个网络层)对数据来说太复杂了。这个网络层可能有些太宽了。

下面是num_neurous=25的情况:

这类测试可能需要相当长的时间来培养一种直觉。我们可能会发现,随着训练时间的增加,有时一次改变一个参数会掩盖一次调整两个参数所带来的好处,任务的复杂度会越来越高。

如果我们觉得模型对训练数据过拟合,但又无法占到使模型更简单的方法,那么我们总是可以尝试增加模型中的Dropout()函数中的百分比参数。这是一种可以降低过拟合的方法,同时允许模型具备匹配数据所需的尽可能高的复杂度。如果我们把dropout百分比设置在50%以上,那么就会开始有学习上的困难,学习速度将会变慢,验证误差将会增多。

对许多NLP问题来说,循环网络的dropout百分比设置为20-50%是一个相当安全的范围。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/53963.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

鸿蒙 ArkUI组件二

ArkUI组件(续) 文本组件 在HarmonyOS中,Text/Span组件是文本控件中的一个关键部分。Text控件可以用来显示文本内容,而Span只能作为Text组件的子组件显示文本内容。 Text/Span组件的用法非常简单和直观。我们可以通过Text组件来显…

Doris相关记录

Doris工作整理 Doris索引、分区及物化视图踩坑 Doris向量化引擎理解与Clickhouse对比 Flink写Doris的checkpoint及label问题 Doris新增节点分片数据自动迁移

多模态大语言模型综述(中)-算法实用指南

本文是Multimodal Large Language Models: A Survey的译文之算法实用指南部分。 上:摘要、概念与技术要点实用指南中:算法实用指南(本文)下: 任务的实用指南(应用)、挑战等 原始信息 标题: Multimodal Large Language Models: A Survey译文: 多模态大…

拓扑排序算法

拓扑排序算法 上图意思为在我想要完成C7这件事之前我必须先完成事件C1,在完成C5这件事之前我必须先完成事件C6和C3.由图可以提看出拓扑序列是不唯一的。 有向图拓扑排序算法基本步骤: 1.从图中选择一一个入入度为0的顶点, 输出该顶点; 2.从图中删除该…

算子加速(3):自定义cuda扩展

文章目录 1.CUDA 扩展介绍1.1 CUDA 检查1.2 项目结构2 简单案例2.1 c++ 代码2.2 cu 核函数2.3 setup.py文件2.4 python文件3 进阶案例3.1 c++ 代码实现3.2 cuda 核函数的实现3.2.1 forward 方法3.2.2 backward 方法3.3 setup.py3.4 python 调用4.完整代码需要自定义某个层,或有…

MutationObserver详解+案例——深入理解 JavaScript 中的 MutationObserver:原理与实战案例

目录 深入理解 JavaScript 中的 MutationObserver:原理与实战案例 一、MutationObserver 简介 二、MutationObserver 的工作原理 1、基本用法 2、observe 方法的配置项 三、实战案例 案例 1:监控动态内容加载 案例 2:监控属性变化 案…

springboot 项目获取 yaml/yml (或 properties)配置文件信息

文章目录 springboot 项目获取配置文件信息前言1、 Autowired 注入 Environment类2、基础用法,使用Value注解直接注入配置信息3、进阶方法(推荐使用)拓展:springboot 集成配置中心 - 以 Apollo 为例 springboot 项目获取配置文件信…

通信工程学习:什么是接入网(AN)中的TF传送功能

接入网(AN)中的TF传送功能 在通信工程中,TF(Transfer Function)传送功能是指为接入网(AN)不同位置之间提供通道和传输介质,以实现数据的有效传输。以下是关于TF传送功能的详细解释&a…

PMP--一模--解题--91-100

文章目录 13.干系人管理91、 [单选] 在项目执行期间,一名外部干系人反对一项重大范围变更。除非重新评估干系人的决定,否则项目进展将受到影响。项目经理下一步该怎么做? 5.范围管理92、 [单选] 一客户给你一复杂项目的采购工作说明书&#x…

配置全新服务器深度学习一套流程

目录 1.安装anaconda2.配置cuda3.配置cudnn4.配置新的pytorch环境5.安装rdkit包6.小问题记录 1.安装anaconda 直接参考视频 总结: 1.下载anaconda安装包,尽量不下载最新的版本 2.bash 对应安装包,一直回车,yes 3.配置环境vim ~/.…

CSS3中的@media查询

CSS3的media查询是一种强大的功能,允许我们根据不同的媒体类型和设备特性来应用不同的样式规则。这使得我们能够创建响应式设计,确保网站或应用在各种设备和屏幕尺寸上都能提供良好的用户体验。本文将详细探讨media查询的定义、语法、使用场景及常见问题…

C++学习笔记(26)

七 、显示字符串中的字符 从界面上输入一个字符串(C 风格),把字符串中的每个字符显示出来,如果输入的是"abc",要求: 1)正序显示:a b c 2)逆序显示:…

实战千问2大模型第三天——Qwen2-VL-7B(多模态)视频检测和批处理代码测试

画面描述:这个视频中,一位穿着蓝色西装的女性站在室内,背景中可以看到一些装饰品和植物。她双手交叉放在身前,面带微笑,似乎在进行一场演讲或主持活动。她的服装整洁,显得非常专业和自信。 一、简介 阿里通义千问开源新一代视觉语言模型Qwen2-VL。其中,Qwen2-VL-72B在大…

vue2——使用Element-UI实现可搜索的树形结构

树形结构在日常开发中非常常见,例如菜单、组织架构等场景。Element-UI作为一款基于Vue.js的桌面端组件库,提供了丰富的组件供开发者使用。其中,Tree组件可以轻松实现树形结构的展示。但在实际项目中,我们往往需要实现可搜索的树形…

在k8s中,客户端访问服务的链路流程,ingress--->service--->deployment--->pod--->container

ingress是一个API资源。 其核心作用是nginx网页服务器。 当客户端访问服务器不同的url时, 用不同的location提供服务。 在k8s之外,nginx的配置一般如下: http {server {listen 80;server_name localhost;location / {root html; …

【鸿蒙OH-v5.0源码分析之 Linux Kernel 部分】003 - vmlinux.lds 链接脚本文件源码分析

【鸿蒙OH-v5.0源码分析之 Linux Kernel 部分】003 - vmlinux.lds 链接脚本文件源码分析 系列文章汇总:《鸿蒙OH-v5.0源码分析之 Uboot+Kernel 部分】000 - 文章链接汇总》 本文链接:《【鸿蒙OH-v5.0源码分析之 Linux Kernel 部分】003 - vmlinux.lds 链接脚本文件源码分析》 …

鸿蒙开发入门day19-使用NDK接口构建UI(一)

(创作不易,感谢有你,你的支持,就是我前行的最大动力,如果看完对你有帮助,还请三连支持一波哇ヾ(@^∇^@)ノ) 目录 NDK接口概述 整体架构 开发流程 接入ArkTS页面 占位组件 NDK组…

unity3d入门教程六

unity3d入门教程六 15.1预制体15.2编辑预制体15.3在场景中编辑15.4动态创建实例15.5实例的销毁16.1(练习)子弹发射16.2定时器16.3键盘事件 15.1预制体 火神山10天建成,使用了预制体技术 一个个小房间都是事先建造好的,最后吊车装…

观众登记2025中国(深圳)国际智能手机供应链展览会

时间:2024年4月9-11日 地点:深圳会展中心 ◆展会背景background: 近年来,国内手机品牌在全球市场上的影响力不断增强,华为、OPPO、VIVO和小米等…

ICPC网络赛 以及ACM训练总结

一、训练反思 关于我自己暑假期间训练的反思,我承认无论是因为什么原因,我自己浪费我整整一个暑假的时间,暑假期间正是我们集训的关键时期,这期间没有任何的事情来打扰我们学习,而我却熬夜,白天训练懈怠&a…