【Python学习笔记】Optuna + Transformer B站视频实践

【Python学习笔记】Optuna + Transformer 实践

背景前摇(省流可不看):
之前以泰坦尼克号数据集为案例,学习了Optuna的基本操作,为了进一步巩固知识和便于包装简历,决定找个唬人一点的项目练练手。
————————————————————————————————————————————
B站大学学习视频:【手把手带你实战HuggingFace Transformers-番外技能篇】基于Optuna的transformers模型自动调参
https://www.bilibili.com/list/watchlater?oid=875968820&bvid=BV1NN4y1S7i8&spm_id_from=333.1007.top_right_bar_window_view_later.content.click
传送门
————————————————————————————————————————————
正文:
划重点:权重参数是模型(通过梯度下降等)自己一点点学到的,超参数是需要人为设置的。
按我的理解打个粗略的比方:权重参数表示模型“学什么”,超参数表示模型“怎么学”。比如说一个学生要上学,如果父母有车有时间送,那就坐家里的车去学校,如果父母没车或者没时间,他就走路或者骑自行车、坐公交等去学校。他怎么去学校很大程度上他父母会决定,当然要是他父母没说话,他自己也会有个默认选择,这就是超参数。
至于上学路上他花多久时间,走快点走慢点,要不要顺路买个早点或者等等同班同学,还是一大早直奔学校沉迷学习,这就是他自己决定看啥更重要了,即权重参数。(该例子很不贴切严谨,仅代表个人理解,请勿较真)
在这里插入图片描述
“一个最优目标的定义”,之前泰坦尼克号那个案例,最优目标就是希望均方根差(root mean square error,缩写RMSE)最小。
————————————————————————————————
原作者的示例代码库下载地址:https://github.com/zyds/transformers-code
添加链接描述
在这里插入图片描述
(看起来好NB好系统好全面的教程!在下技术小白先膜拜一波,感谢大佬的无私分享)
找到这个名为hyp_tune_optuna.ipynb的代码:
在这里插入图片描述
————————————————————————————————
我一开始以为这个代码需要一个特别麻烦的库PyTorch(后面发现并不用……直接装需要的俩库就完事了……),还是把教程放在这里吧。
第一次安装的话很费劲,大家想试试的千万做好耗时间的心理准备:
https://cloud.tencent.com/developer/article/2154882
腾讯云yyds
在这里插入图片描述
————————————————————————————————————————————
pip install 一下 transformer 和 dataset 库。
在这里插入图片描述
检查一下,原视频UP的Github,发现适配的Transformer是4.36.2的,先把这个搞定:
(这我习惯不好,应该在开始跑项目装环境之前就先看看示例用的什么版本,免得后来费事卸载重装,大家不要学我。)
在这里插入图片描述
————————————————————————————————————————————
如果安装完这俩库,一运行还报一个huggingface相关的错,别担心,按照提示,输入命令‘pip install transformers -U’执行即可搞定。
在这里插入图片描述
前面几个Step主要在装库,载入数据集,创建模型等,正常运行即可。
到Step4这里开始莫名其妙地扯拐:
在这里插入图片描述
RuntimeError: Failed to import transformers.models.bert.configuration_bert because of the following error (look up to see its traceback):
Failed to import transformers.onnx.config because of the following error (look up to see its traceback):
DLL load failed while importing _imaging: 找不到指定的模块。
不要怕,遇到这种差东西的报错一般都是环境问题,复制报错让Kimi看看:
在这里插入图片描述
基本上看来是环境没配对造成的了,十有八九这个锅还是Python背。————————————————————————————————————————————

后再运行发现他的报错变简单了:DLL load failed while importing _imaging: 找不到指定的模块。
在这里插入图片描述
再针对这个报错搜索,发现是Pillow版本太低导致的:
发现输出还有bug,再搜:
Map: 0%| | 0/6988 [00:00<?, ? examples/s]
Unexpected exception formatting exception. Falling back to standard exception
Traceback (most recent call last):
File “c:\Users\admin\anaconda3\envs\optuna-example\lib\site-packages\PIL\Image.py”, line 108, in
raise ImportError(msg)
ImportError: The _imaging extension was built for another version of Pillow or PIL:
Core version: 10.4.0
Pillow version: 9.3.0

发现需要10.4.0版本的Pillow,那就卸载重新再装这个版本,中间搜到有人的教程说要多Uninstall几次。
如果还是没效果的话把命令行和VSCode都关了重新打开运行试试,我就是VSCode这块反复装都报错,这块死活都过不去,一气之下全关了,换成Jupyter Notebook重新开始运行,结果一下子就好了,并且以后换成VSCode打开也没问题了。
在这里插入图片描述
后面遇到evaluate等库没有的话也不要怕,阅读报错提示+网上搜索,跟着教程pip install就是。人工智能这块就是装环境比较复杂,新手适应起来有一段时间,玩熟了就是小菜一碟了。
————————————————————————————————————————————
把环境问题解决以后就可以顺利跑代码了,先展示一下运行效果:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
可以看出这个运行时间真的需要很久,一上午过去了,最后一个代码块都还在读条中。这也是为什么我建议在把环境装上以后先把代码跑起来,然后再跟着视频学细节。(github的代码是UP老师已经改好的,所以不用担心好不容易跑完了结果发现代码要改的情况)
————————————————————————————————————————————
在这里插入图片描述
要进行自动调参,模型每一次调整都要重新进行初始化,这个时候就不能给一个现成已经初始化好的模型了,需要把初始化模型包装成一个方法提供给Trainer。
在这里插入图片描述
自动调参数据量比较大的时候,不想要输出特别多的日志,就把logging_steps调得大一些。
在这里插入图片描述
老师在这一段详细带了看后端代码,这一段要认真听。
(顺便提一句,虽然看了不少教程,但我还是觉得计算机和人工智能的相关知识就和天上的星星一样多,无论怎么学都感觉还有好多不会的东西……)
这里介绍了四种调参的后端,我们这里用到的是第一种,也是默认的Optuna。在这里插入图片描述
在这里插入图片描述在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
跟着UP老师的指导一步步往里找,最后发现今天这种使用方式和之前的泰坦尼克号案例(详见主页上一篇文章)应用Optuna的方式有一些相似之处,最后都是回到安装库和字典传超参数。但是具体怎么调用的方式又有一些区别,先前那种更像是简明扼要直接定义一个对象就使用,这里用的感觉比较隐晦,不知道是不是算作一种封装?或者,集成?可能这就是大型项目和小白练手的区别吧。
后面老师微改了一下代码,直接把字典放进这个函数指定超参数,感觉这就和泰坦尼克号案例里面直接调用的方式有点像了。

泰坦尼克号案例使用Optuna的例子:https://www.kaggle.com/code/yunsuxiaozi/learn-to-use-the-optuna/notebook
原网页传送门
在这里插入图片描述
————————————————————————————————————————————
一些代码细节:
一前一后的这两个数字代表的是可调参数的范围:
batch_size大多设置为2的倍数,按指数增长去调,而不是1加1这样改。
在这里插入图片描述
使用这种方式的时候,不仅仅可以调Batch_Size,还可以调整优化器,比如用Adam,SVD等,比如老师在后续视频中示范的这样:
在这里插入图片描述
————————————————————————————————————————————
我的电脑最后跑出来的结果:完成了8个Trial,但其实到第3个Trial的时候已经达到极限了。
在这里插入图片描述
对比一下UP老师的结果:
在这里插入图片描述
————————————————————————————————————————————
老师展示的训练案例:中间发现效果不理想,直接剪枝停掉这次实验。这也是超参数的策略之一,决定什么时候停止实验。在这里插入图片描述在这里插入图片描述

在这里插入图片描述————————————————————————————————————————————
最后UP老师的总结:
在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Linux:Linux网络总结(附下载链接)

文章目录 下载链接网络问题综合问题访问一个网页的全过程&#xff1f;WebSocket HTTPHTTP基本概念GET与POSTHTTP特性HTTP缓存技术HTTP的演变HTTP1.1 优化 HTTPSHTTP与HTTPS有哪些区别&#xff1f;HTTPS解决了HTTP的哪些问题&#xff1f;HTTPS如何解决的&#xff1f;HTTPS是如何…

【数据结构】手写堆 HEAP

heap【堆】掌握 手写上浮、下沉、建堆函数 对一组数进行堆排序 直接使用接口函数heapq 什么是堆&#xff1f;&#xff1f;&#xff1f;堆是一个二叉树。也就是有两个叉。下面是一个大根堆&#xff1a; 大根堆的每一个根节点比他的子节点都大 有大根堆就有小根堆&#xff1…

数据结构(4.1)——串的存储结构

串的顺序存储 串&#xff08;String&#xff09;的顺序存储是指使用一段连续的存储单元来存储字符串中的字符。 计算串的长度 静态存储(定长顺序存储) #define MAXLEN 255//预定义最大串为255typedef struct {char ch[MAXLEN];//每个分量存储一个字符int length;//串的实际长…

YOLOv8-OBB 旋转目标检测训练自己的数据

数据集制作 标注工具&#xff1a;X-AnyLabeling https://github.com/CVHub520/X-AnyLabeling 下载链接&#xff1a;https://pan.baidu.com/s/1UsnDucBDed8pU1RtaVZhQw?pwd5kel 数据标注可以参考&#xff1a;https://zhuanlan.zhihu.com/p/665036259 1. 选择导出方式为…

Ubuntu搭建Android架构so库交叉编译环境

目录 前言一、下载NDK并安装二、安装NDK三、配置交叉编译工具链四、编写交叉编译脚本 前言 需要将一些源码编译成Android可用的架构的so库 一、下载NDK并安装 https://developer.android.google.cn/ndk/downloads/ 二、安装NDK 将下载下来的android-ndk-r23b-linux.zip解压…

[GICv3] 3. 物理中断处理(Physical Interrupt Handling)

中断生命周期 ​​ 外设通过中断信号线生成中断&#xff0c;或者软件生成中断&#xff08;SGI&#xff09;。Distributor 和 ReDistributor 配合按照中断分组和中断优先级仲裁后将最高优先级的中断分发到 CPU interface。cpu interface 向中断发送到 PEPE 读取 IAR 寄存器&am…

力扣 24两两交换链表中节点

画图 注意有虚拟头结点 注意判断时先判断cur->next ! nullptr,再判断cur->next->next ! nullptr 注意末尾返回dumyhead->next&#xff0c;用新建result指针来接并返回 class Solution { public:ListNode* swapPairs(ListNode* head) {ListNode *dummyhead new …

高等数学第一讲:函数极限与连续

函数极限与连续 文章目录 函数极限与连续1.函数概念与特性1.1 函数定义 1.2 几种重要的基本函数类型1.2.1 反函数1.2.2 复合函数1.2.3 隐函数 1.3 函数的基本特性1.3.1 有界性1.3.2 单调性1.3.3 奇偶性1.3.4 周期性 2. 函数的极限2.1函数的极限的定义2.2 函数的极限的性质2.3 无…

昇思25天学习打卡营第19天|基于MindNLP+MusicGen生成自己的个性化音乐

MusicGen是来自Meta AI的Jade Copet等人提出的基于单个语言模型&#xff08;LM&#xff09;的音乐生成模型&#xff0c;能够根据文本描述或音频提示生成高质量的音乐样本&#xff0c;相关研究成果参考论文《Simple and Controllable Music Generation》。 MusicGen模型基于Tra…

LabVIEW液压数据采集测试系统

液压系统是装载机的重要组成部分&#xff0c;通过液压传动和控制实现各项作业功能&#xff0c;如提升、倾斜、转向等。液压系统的性能直接影响装载机的作业效率和稳定性。为了保证装载机液压系统的正常运行和优化设计&#xff0c;需要对其进行数据采集和测试。本文介绍了一套基…

jQuery代码原封不动的显示在网页中,应该是没有放在script标签中

jQuery代码原封不动的显示在网页中&#xff0c; 应该是没有放在script标签中 <body> <span id"a1">I am a element by id is a1</span>$(#a1).attr({name:spanDom,title:a1Title}); alert($(#a1).attr(id));alert($(#a1).attr(name));alert($(#a1…

企业网三层架构

企业网三层架构&#xff1a;是一种层次化模型设计&#xff0c;旨在将复杂的网络设计分成三个层次&#xff0c;每个层次都着重于某些特定的功能&#xff0c;以提高效率和稳定性。 企业网三层架构层次&#xff1a; 接入层&#xff1a;使终端设备接入到网络中来&#xff0c;提供…

昇思25天学习打卡营第20天 | 基于MindNLP+MusicGen生成自己的个性化音乐

基于MindNLPMusicGen生成个性化音乐 实验简介 MusicGen是Meta AI提出的音乐生成模型&#xff0c;能够根据文本描述或音频提示生成高质量音乐。该模型基于Transformer结构&#xff0c;分为三个阶段&#xff1a;文本编码、音频token预测和音频解码。此实验将演示如何使用MindSpo…

【JavaEE】AOP实现原理

概述 Spring AOP 是基于动态代理来实现AOP的, 此处主要介绍代理模式和Spring AOP的源码剖析 一.代理模式 代理模式是一种常用的设计模式&#xff0c;它允许为其他对象提供代理&#xff0c;以控制对这个对象的访问。这种结构在不改变原始类的基础上&#xff0c;通过引入代理类…

CentOS 7:停止更新后如何下载软件?

引言 CentOS 7 是一个广受欢迎的 Linux 发行版&#xff0c;它为企业和开发者提供了一个稳定、安全、且免费的操作系统环境。然而&#xff0c;随着时间的推移&#xff0c;CentOS 7 的官方支持已经进入了维护阶段&#xff0c;这意味着它将不再收到常规的更新和新功能&#xff0c;…

「网络通信」HTTP 协议

HTTP &#x1f349;简介&#x1f349;抓包工具&#x1f349;报文结构&#x1f34c;请求&#x1f34c;响应&#x1f34c;URL&#x1f95d;URL encode &#x1f34c;方法&#x1f34c;报文字段&#x1f95d;Host&#x1f95d;Content-Length & Content-Type&#x1f95d;User…

千帆模型申请方法

第一步&#xff1a;注册千帆云账号 百度智能云-云智一体深入产业 第二步&#xff1a;申请实名认证 第三步&#xff1a;开通服务 第四步&#xff1a;配置到网方Ai的设置里去&#xff0c;网方Ai的下载地址见下面链接。 网方Ai的软件下载地址见论坛地址&#xff1a; 网创有方官…

Spark调度底层执行原理详解(第35天)

系列文章目录 一、Spark应用程序启动与资源申请 二、DAG&#xff08;有向无环图&#xff09;的构建与划分 三、Task的生成与调度 四、Task的执行与结果返回 五、监控与容错 六、优化策略 文章目录 系列文章目录前言一、Spark应用程序启动与资源申请1. SparkContext的创建2. 资…

TS真的比JS更好吗?

前言 在讨论TypeScript&#xff08;TS&#xff09;是否比JavaScript&#xff08;JS&#xff09;更好时&#xff0c;我们需要明确“更好”这一概念的上下文和衡量标准。TypeScript和JavaScript在多个方面有着明显的区别&#xff0c;但它们并不是简单的“好”与“不好”的关系&a…

接口安全配置

问题点&#xff1a; 有员工在工位在某个接口下链接一个集线器&#xff0c;从而扩展上网接口&#xff0c;这种行为在某些公司是被禁止的&#xff0c;那么网络管理员如何控制呢&#xff1f;可以配置接口安全来限制链接的数量&#xff0c;切被加入安全的mac地址不会老化&#xff…