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

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

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

相关文章

[读论文]Transformers are SSMs

Notation T T T: Sequence length/ time length $$: 摘要 虽然transformer一直是深度学习在语言建模方面成功的主要架构&#xff0c;但状态空间模型(ssm)&#xff0c;如Mamba&#xff0c;最近被证明在中小规模上与transformer相匹配或优于transformer。这些模型族实际上是非常…

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

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

子进程继承父进程文件描述符导致父进程打开设备文件失败

开发过程中有时会遇到需要在程序中执行三方程序或者shell脚本&#xff0c;一般会通过system(), popen(), exec簇来完成该功能。我们知道以上方法会通过fork创建子进程后在子进程中执行相应指令。如图1为某个示例流程&#xff0c;具体的程序执行流程如图2所示&#xff0c;线程my…

计算机图形学入门28:相机、透镜和光场

1.前言 相机(Cameras)、透镜(Lenses)和光场(Light Fields)都是图形学中重要的组成部分。在之前的学习中&#xff0c;都是默认它们的存在&#xff0c;所以现在也需要单独拿出来学习下。 2.成像方法 计算机图形学有两种成像方法&#xff0c;即合成(Synthesis)和捕捉(Capture)。前…

pytorch的基本使用(上)

目录 一、安装pytorch1、用conda指令创建一个pytorch的环境2、安装pytorch&#xff08;无独显&#xff09; 二、编译器选择1、pycharm&#xff08;1&#xff09;安装pycharm&#xff08;2&#xff09;选择编译器&#xff08;3&#xff09;检测能否正常运行小技巧 pycharm 的创建…

【linux】解决报错:Network error: Connection refused

【linux】解决报错&#xff1a;Network error: Connection refused 【创作不易&#xff0c;求点赞关注收藏】&#x1f600; 一、问题描述 我现在使用MobaTerm远程连接服务器&#xff0c;但是出现了Network error: Connection refused报错&#xff0c;可能是我原先设置了一些…

计网-三次握手和四次挥手

TCP建立和断开连接的过程&#xff08;三次握手和四次挥手&#xff09; TCP通信的过程&#xff1a; 问题&#xff1a;tcp是如何保证数据在客户端和服务端之间通信传输的&#xff1f; 分为三个步骤&#xff1a;三次握手&#xff0c;传输数据确认&#xff0c;四次挥手。三次握手…

react的解构赋值

我最近在用react讨生活。我的感觉&#xff0c;react开发效率不高。这当然应该是我还不熟悉react的缘故。但是&#xff0c;在阅读react代码过程中&#xff0c;其中一个容易困惑的地方是它到处充斥着的解构赋值。当然了&#xff0c;解构赋值并不是React特有的功能&#xff0c;而是…

OpenCV距离变换函数distanceTransform的使用

操作系统&#xff1a;ubuntu22.04OpenCV版本&#xff1a;OpenCV4.9IDE:Visual Studio Code编程语言&#xff1a;C11 功能描述 distanceTransform是OpenCV库中的一个非常有用的函数&#xff0c;主要用于计算图像中每个像素到最近的背景&#xff08;通常是非零像素到零像素&…

tkinter-TinUI-xml实战(12)pip可视化管理器

引言 pip命令行工具在平常使用方面确实足够简单&#xff0c;本项目只是作为TinUI多界面开发的示例。 当然&#xff0c;总有人想用GUI版pip&#xff0c;实际上也有。不过现在&#xff0c;我们就来手搓一个基于python和TinUI&#xff08;tkinter&#xff09;的pip可视化管理器。…

数据结构——考研笔记(二)线性表的定义和线性表之顺序表

文章目录 二、线性表2.1 定义、基本操作2.1.1 知识总览2.1.2 线性表的定义2.1.3 线性表的基本操作2.1.4 知识回顾与重要考点 2.2 顺序表2.2.1 知识总览2.2.2 顺序表的定义2.2.3 顺序表的实现——静态分配2.2.4 顺序表的实现——动态分配2.2.5 知识回顾与重要考点2.2.6 顺序表的…

【分库】分库的设计与原则、数据分片策略、垂直分库与水平分库、数据库引擎选择与配置优化

目录 引言 分库设计原则 数据分片策略的选择 垂直分库 vs 水平分库的比较 数据库引擎选择与配置优化 引言 在面对日益增长的数据量和不断升级的业务需求时&#xff0c;传统的单体数据库架构往往难以应对高并发、大数据量带来的性能瓶颈。为了突破这些限制&#xff0c;分库…

godis源码分析——database存储核心1

前言 redis的核心是数据的快速存储&#xff0c;下面就来分析一下godis的底层存储是如何实现&#xff0c;先分析单机服务。 此文采用抓大放小原则&#xff0c;先大的流程方向&#xff0c;再抓细节。 流程图 源码分析 现在以客户端连接&#xff0c;并发起set key val命令为例…

vue3中谷歌地图+外网申请-原生-实现地址输入搜索+点击地图获取地址回显 +获取国外的geoJson实现省市区级联选择

一. 效果&#xff1a;输入后显示相关的地址列表&#xff0c;选中后出现标示图标和居中定位 1.初始化谷歌地图 在index.html加上谷歌api请求库 <script src"https://maps.googleapis.com/maps/api/js?key申请到的谷歌地图密钥&vweekly&librariesgeometry,place…

基于TCP的在线词典系统(分阶段实现)(阻塞io和多路io复用(select)实现)

1.功能说明 一共四个功能&#xff1a; 注册 登录 查询单词 查询历史记录 单词和解释保存在文件中&#xff0c;单词和解释只占一行, 一行最多300个字节&#xff0c;单词和解释之间至少有一个空格。 2.功能演示 3、分阶段完成各个功能 3.1 完成服务器和客户端的连接 servic…

Vue el-input 限制输入内容

&#x1f914;日常项目中经常遇到既要el-input的样式&#xff0c;又要el-input-number限制&#xff0c;所以需要绑定input事件进行约束输入限制。 以下使用自定义指令进行约束el-input输入的值&#xff0c;便于后期统一管理和拓展。 预览 代码 <!DOCTYPE html> <ht…

【机器学习】精准农业新纪元:机器学习引领的作物管理革命

&#x1f4dd;个人主页&#x1f339;&#xff1a;Eternity._ &#x1f339;&#x1f339;期待您的关注 &#x1f339;&#x1f339; ❀目录 &#x1f50d;1. 引言&#x1f4d2;2. 精准农业的背景与现状&#x1f341;精准农业的概念与发展历程&#x1f342;国内外精准农业实践案…

【数据结构】手写堆 HEAP

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

(南京观海微电子)——二极管应用及选取

二极管是 用半导体材料(硅、硒、锗等)制成的一种电子器件。二极管有两个电极&#xff0c;正极&#xff0c;又叫阳极&#xff1b;负极&#xff0c;又叫阴极&#xff0c;给二极管两极间加上正向电压时&#xff0c;二极管导通&#xff0c; 加上反向电压时&#xff0c;二极管截止。…

Vue1-Vue核心

目录 Vue简介 官网 介绍与描述 Vue的特点 与其它 JS 框架的关联 Vue周边库 初识Vue Vue模板语法 数据绑定 el与data的两种写法 MVVM模型 数据代理 回顾Object.defineProperty方法 何为数据代理 Vue中的数据代理 数据代理图示 事件处理 事件的基本使用 事件修…