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

news2024/9/22 21:17:19

【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老师的总结:
在这里插入图片描述

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

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

相关文章

《揭秘深度强化学习》:一本揭示AI前沿技术的必读书籍

在人工智能&#xff08;AI&#xff09;领域飞速发展的今天&#xff0c;深度强化学习作为一种革命性技术&#xff0c;正在改变我们的世界。今天要向大家推荐的是《揭秘深度强化学习》这本书&#xff0c;它不仅为读者提供了深度强化学习的全面指南&#xff0c;还揭示了这一技术的…

常用I/O复用模型 --> 一、单线程Accept(无IO复用)

文章目录 一、前言二、I/O复用中最基础的知识点1、流2、I/O操作3、阻塞等待4、非阻塞&#xff0c;忙轮询5、多路I/O复用 三、单线程Accept(无IO复用)1、服务端2、客户端 一、前言 单线程Accept(无IO复用)是网络最基础的模型&#xff0c;常供学习使用。 下面是我的GitHub仓库&…

韦东山嵌入式linux系列-驱动设计的思想(面向对象/分层/分离)

1 面向对象 字符设备驱动程序抽象出一个 file_operations 结构体&#xff1b; 我们写的程序针对硬件部分抽象出 led_operations 结构体。 2 分层 上下分层&#xff0c;比如我们前面写的 LED 驱动程序就分为 2 层&#xff1a; ① 上层实现硬件无关的操作&#xff0c;比如注册…

各种Attention|即插即用|适用于YoloV5、V7、V8、V9、V10(一)

摘要 本文总结了各种注意力&#xff0c;即插即用&#xff0c;方便大家将注意力加到自己的论文中。 SE import torch from torch import nn class SEAttention(nn.Module): """ SENet&#xff08;Squeeze-and-Excitation Networks&#xff09;中的注意力…

浅析 VO、DTO、DO、PO 的概念

文章目录 I 浅析 VO、DTO、DO、PO1.1 概念1.2 模型1.3 VO与DTO的区别I 浅析 VO、DTO、DO、PO 1.1 概念 VO(View Object) 视图对象,用于展示层,它的作用是把某个指定页面(或组件)的所有数据封装起来。DTO(Data Transfer Object): 数据传输对象,这个概念来源于J2EE的设…

Redis系列命令更新--Redis哈希命令

一、设置密码验证&#xff1a; 使用文本编辑器&#xff0c;这里使用Notepad&#xff0c;打开Redis服务配置文件。 注意&#xff1a;不要找错了&#xff0c;通常为redis.windows-service.conf&#xff0c;而不是redis.windows.conf。后者是以非系统服务方式启动程序使用的配置…

Gradle学习-6 APT 实现一个路由跳转框架(APT、发布maven仓库)

Annotation 注解&#xff1a;注解是元数据&#xff0c;即描述数据的数据APT&#xff08;Annotation Processing Tool&#xff09;注解处理器 APT工作原理 Demo介绍 APT项目地址 使用APT maven仓库地址 &#xff08;1&#xff09;项目配置 Gradle 8.2AGP 8.2.0Java jdk 17…

Python爬虫速成之路(2):爬天气情况

hello hello~ &#xff0c;这里是绝命Coding——老白~&#x1f496;&#x1f496; &#xff0c;欢迎大家点赞&#x1f973;&#x1f973;关注&#x1f4a5;&#x1f4a5;收藏&#x1f339;&#x1f339;&#x1f339; &#x1f4a5;个人主页&#xff1a;绝命Coding-CSDN博客 &a…

到底哪些牌子的鼠标好?选择鼠标需要注意哪些问题?

鼠标的选择从外观材质、手感、配置到价格定位都不尽相同&#xff0c;消费者的选择也越来越多。一般在选择鼠标时&#xff0c;我们也会发现鼠标能够选择的品牌虽然众多&#xff0c;但是不同品牌下的鼠标在品质和款式上都是大不相同的&#xff0c;那么到底哪些牌子的鼠标好呢?我…

黑马头条微服务学习day01-环境搭建、SpringCloud微服务(注册发现、网关)

文章目录 项目介绍环境搭建项目背景业务功能技术栈说明 nacos服务器环境准备nacos安装 初始工程搭建环境准备主体结构 app登录需求分析表结构分析手动加密微服务搭建接口定义功能实现登录功能实现 Swagger使用app端网关nginx配置 项目介绍 环境搭建 项目背景 业务功能 技术栈说…

11计算机视觉—语义分割与转置卷积

目录 1.语义分割应用语义分割和实例分割2.语义分割数据集:Pascal VOC2012 语义分割数据集预处理数据:我们使用图像增广中的随机裁剪,裁剪输入图像和标签的相同区域。3.转置卷积 上采样填充、步幅和多通道填充步幅多通道转置卷积是一种卷积:重新排列输入和核转置卷积是一种卷…

高校寻物平台小程序的设计

失主账户功能包括&#xff1a;系统首页&#xff0c;个人中心&#xff0c;寻物启示管理&#xff0c;失物归还管理&#xff0c;失物认领管理&#xff0c;举报投诉管理 微信端账号功能包括&#xff1a;系统首页&#xff0c;寻物启示&#xff0c;失物招领&#xff0c;公告信息&…

机器学习和人工智能在农业的应用——案例分析

作者主页: 知孤云出岫 目录 引言机器学习和人工智能在农业的应用1. 精准农业作物健康监测土壤分析 2. 作物产量预测3. 农业机器人自动化播种和收割智能灌溉 4. 农业市场分析价格预测需求预测 机器学习和人工智能带来的变革1. 提高生产效率2. 降低生产成本3. 提升作物产量和质量…

[笔试训练](二十七)109:旋转字符串110:合并k个已排序的链表111:滑雪

目录 109:旋转字符串 110:合并k个已排序的链表 111:滑雪 109:旋转字符串 题目链接:旋转字符串_牛客题霸_牛客网 (nowcoder.com) 题目: 题解: class Solution { public:bool solve(string A, string B) {int nA.size();if(n!B.size()) return false;for(int i0;i<n;i){…

32路串口服务器 应用领域

32路串口服务器在多个领域有着广泛的应用&#xff0c;以下是详细的应用实例&#xff1a; 一、工业自动化 在工业自动化领域&#xff0c;32路串口服务器发挥着举足轻重的作用。传统的工业设备往往采用串口通信方式&#xff0c;而串口服务器能够将这些设备接入网络&#xff0c;…

护网HW面试常问——组件中间件框架漏洞(包含流量特征)

apache&iis&nginx中间件解析漏洞 参考我之前的文章&#xff1a;护网HW面试—apache&iis&nginx中间件解析漏洞篇-CSDN博客 log4j2 漏洞原理&#xff1a; 该漏洞主要是由于日志在打印时当遇到${后&#xff0c;以:号作为分割&#xff0c;将表达式内容分割成两部…

C++基础入门(下)

个人主页&#xff1a;C忠实粉丝 欢迎 点赞&#x1f44d; 收藏✨ 留言✉ 加关注&#x1f493;本文由 C忠实粉丝 原创 C基础入门(下) 收录于专栏【C语法基础】 本专栏旨在分享学习C的一点学习笔记&#xff0c;欢迎大家在评论区交流讨论&#x1f48c; 目录 1.函数重载 1.1.参数类…

【调试笔记-20240713-Windows-Tauri 多个HTML页面支持】

调试笔记-系列文章目录 调试笔记-20240713-Windows-Tauri 多个HTML页面支持 文章目录 调试笔记-系列文章目录调试笔记-20240713-Windows-Tauri 多个HTML页面支持 前言一、调试环境操作系统&#xff1a;Windows 10 专业版调试环境调试目标 二、调试步骤搜索相似问题 三、应用场…

哪些单位和系统需要做等保测评

在信息安全领域&#xff0c;等级保护&#xff08;简称“等保”&#xff09;测评是一项至关重要的工作&#xff0c;旨在确保信息系统的安全性与合规性。本文将详细阐述哪些单位、哪些系统必须进行等保二级或三级测评&#xff0c;并探讨等保测评对企业的重要性。 一、必须进行等保…

【第27章】MyBatis-Plus之Mybatis X 插件

文章目录 前言一、安装指南二、核心功能1.XML 映射跳转2.代码生成3. 重置模板 三、JPA 风格提示四、常见问题解答1. JPA 提示功能无法使用&#xff1f;2. 生成的表名与预期不符&#xff1f; 五、代码生成模板配置1. 默认模板2. 重置默认模板3. 自定义模板内容3.1 实体类信息3.2…