PyTorch 模型训练实用教程(附代码)
向AI转型的程序员都关注了这个号????????????
机器学习AI算法工程 公众号:datayx
PyTorch 能在短时间内被众多研究人员和工程师接受并推崇是因为其有着诸多优点,如采用 Python 语言、动态图机制、网络构建灵活以及拥有强大的社群等。
本教程以实际应用、工程开发为目的,着重介绍模型训练过程中遇到的实际问题和方法。如上图所示,在机器学习模型开发中,主要涉及三大部分,分别是数据、模型和损失函数及优化器。本文也按顺序的依次介绍数据、模型和损失函数及优化器,从而给大家带来清晰的机器学习结构。
通过本教程,希望能够给大家带来一个清晰的模型训练结构。当模型训练遇到问题时,需要通过可视化工具对数据、模型、损失等内容进行观察,分析并定位问题出在数据部分?模型部分?还是优化器?只有这样不断的通过可视化诊断你的模型,不断的对症下药,才能训练出一个较满意的模型。
前几年一直在用 Caffe 和 MatConvNet,近期转 PyTorch。当时只想快速地用上 PyTorch 进行模型开发,然而搜了一圈 PyTorch 的教程,并没有找到一款适合的。很多 PyTorch 教程是从学习机器学习 (深度学习) 的角度出发,以 PyTorch 为工具进行编写,里面介绍很多模型,并且附上模型的 demo。
然而,工程应用开发中所遇到的问题并不是跑一个模型的 demo 就可以的,模型开发需要对数据的预处理、数据增强、模型定义、权值初始化、模型 Finetune、学习率调整策略、损失函数选取、优化器选取、可视化等等。鉴于此,我只能自己对着官方文档,一步一步地学习。
起初,只是做了一些学习笔记,后来觉得这些内容应该对大家有些许帮助,毕竟在互联网上很难找到这类内容的分享,于是此教程就诞生了。
PyTorch 模型训练实用教程(附代码)
关注微信公众号 datayx 然后回复 训练 即可获取。
AI项目体验地址 https://loveai.tech
本教程内容及结构
本教程内容主要为在 PyTorch 中训练一个模型所可能涉及到的方法及函数,并且对 PyTorch 提供的数据增强方法(22 个)、权值初始化方法(10 个)、损失函数(17 个)、优化器(6 个)及 tensorboardX 的方法(13 个)进行了详细介绍。
本教程分为四章,结构与机器学习三大部分一致:
第一章,介绍数据的划分,预处理,数据增强;
第二章,介绍模型的定义,权值初始化,模型 Finetune;
第三章,介绍各种损失函数及优化器;
第四章,介绍可视化工具,用于监控数据、模型权及损失函数的变化。
本教程适用读者:
想熟悉 PyTorch 使用的朋友;
想采用 PyTorch 进行模型训练的朋友;
正采用 PyTorch,但无有效机制去诊断模型的朋友;
干货直达:
1.6 transforms 的二十二个方法
2.2 权值初始化的十种方法
3.1 PyTorch 的十七个损失函数
3.3 PyTorch 的十个优化器
3.4 PyTorch 的六个学习率调整方法
4.1 TensorBoardX
为了展示该教程的内容,读者可试读第二章的第一小节,了解PyTorch如何搭建模型:
第二章 模型
第二章介绍关于网络模型的一系列内容,包括模型的定义,模型参数初始化方法,模型的保存和加载,模型的 finetune(本质上还是模型权值初始化),首先介绍模型的定义。
2.1 模型的搭建
2.1.1 模型定义的三要
首先,必须继承 nn.Module 这个类,要让 PyTorch 知道这个类是一个 Module。
其次,在__init__(self) 中设置好需要的「组件"(如 conv、pooling、Linear、BatchNorm 等)。
最后,在 forward(self, x) 中用定义好的「组件」进行组装,就像搭积木,把网络结构搭建出来,这样一个模型就定义好了。
接下来,请看代码,在/Code/main_training/main.py 中可以看到定义了一个类 class Net(nn.Module),先看__init__(self) 函数:
第一行是初始化,往后定义了一系列组件,如由 Conv2d 构成的 conv1,有 MaxPool2d 构成的 poo1l,这些操作均由 torch.nn 提供,torch.nn 中的操作可查看文档:https://PyTorch.org/docs/stable/nn.html#。
当这些组件定义好之后,就可以定义 forward() 函数,用来搭建网络结构,请看代码:
x 为模型的输入,第一行表示,x 经过 conv1,然后经过激活函数 relu,再经过 pool1 操作;
第二行于第一行一样;第三行,表示将 x 进行 reshape,为了后面做为全连接层的输入;
第四,第五行的操作都一样,先经过全连接层 fc,然后经过 relu;
第六行,模型的最终输出是 fc3 输出。
至此,一个模型定义完毕,接着就可以在后面进行使用。例如,实例化一个模型 net = Net(),然后把输入 inputs 扔进去,outputs = net(inputs),就可以得到输出 outputs。
2.1.2 模型定义多说两句
上面只是介绍了模型定义的要素和过程,但是在工程应用中会碰到各种各样的网络模型,这时,我们就需要一些实用工具来帮助我们定义模型了。
这里以 Resnet34 为例介绍「复杂」模型的定义,这部分代码从 github 上获取。
还是从三要素出发看看是怎么定义 Resnet34 的。
首先,继承 nn.Module;
其次,看__init__() 函数,在__init__() 中,定义了这些组件,self.pre,self.layer1-4, self.fc ;
最后,看 forward(),分别用了在__init__() 中定义的一系列组件,并且用了 torch.nn.functional.avg_pool2d 这个操作。
至此,网络定义完成。
以为就完了?怎么可能,__init__() 函数中的组件是怎么定义的,在__init__() 中出现了 torch.nn.Sequential。
组件定义还调用函数_make_layer(),其中也用到了 torch.nn.Sequential,其中还调用了 ResidualBlock(nn.Module),在 ResidualBlock(nn.Module) 中有一次调用了 torch.nn.Sequential。
torch.nn.Sequential 到底是什么呢?为什么都在用呢?
2.1.3 nn.Sequetial
torch.nn.Sequential 其实就是 Sequential 容器,该容器将一系列操作按先后顺序给包起来,方便重复使用。例如 Resnet 中有很多重复的 block,就可以用 Sequential 容器把重复的地方包起来。
官方文档中给出两个使用例子:
模型的定义就是先继承,再构建组件,最后组装。其中基本组件可从 torch.nn 中获取,或者从 torch.nn.functional 中获取,同时为了方便重复使用组件,可以使用 Sequential 容器将一系列组件包起来,最后在 forward() 函数中将这些组件组装成你的模型。
阅读过本文的人还看了以下文章:
【全套视频课】最全的目标检测算法系列讲解,通俗易懂!
《美团机器学习实践》_美团算法团队.pdf
《深度学习入门:基于Python的理论与实现》高清中文PDF+源码
python就业班学习视频,从入门到实战项目
2019最新《PyTorch自然语言处理》英、中文版PDF+源码
《21个项目玩转深度学习:基于TensorFlow的实践详解》完整版PDF+附书代码
《深度学习之pytorch》pdf+附书源码
PyTorch深度学习快速实战入门《pytorch-handbook》
【下载】豆瓣评分8.1,《机器学习实战:基于Scikit-Learn和TensorFlow》
《Python数据分析与挖掘实战》PDF+完整源码
汽车行业完整知识图谱项目实战视频(全23课)
李沐大神开源《动手学深度学习》,加州伯克利深度学习(2019春)教材
笔记、代码清晰易懂!李航《统计学习方法》最新资源全套!
《神经网络与深度学习》最新2018版中英PDF+源码
将机器学习模型部署为REST API
FashionAI服装属性标签图像识别Top1-5方案分享
重要开源!CNN-RNN-CTC 实现手写汉字识别
yolo3 检测出图像中的不规则汉字
同样是机器学习算法工程师,你的面试为什么过不了?
前海征信大数据算法:风险概率预测
【Keras】完整实现‘交通标志’分类、‘票据’分类两个项目,让你掌握深度学习图像分类
VGG16迁移学习,实现医学图像识别分类工程项目
特征工程(一)
特征工程(二) :文本数据的展开、过滤和分块
特征工程(三):特征缩放,从词袋到 TF-IDF
特征工程(四): 类别特征
特征工程(五): PCA 降维
特征工程(六): 非线性特征提取和模型堆叠
特征工程(七):图像特征提取和深度学习
如何利用全新的决策树集成级联结构gcForest做特征工程并打分?
Machine Learning Yearning 中文翻译稿
蚂蚁金服2018秋招-算法工程师(共四面)通过
全球AI挑战-场景分类的比赛源码(多模型融合)
斯坦福CS230官方指南:CNN、RNN及使用技巧速查(打印收藏)
python+flask搭建CNN在线识别手写中文网站
中科院Kaggle全球文本匹配竞赛华人第1名团队-深度学习与特征工程
不断更新资源
深度学习、机器学习、数据分析、python
搜索公众号添加: datayx
QQ群
333972581
PyTorch 模型训练实用教程(附代码)相关推荐
- 《PyTorch模型训练实用教程》—学习笔记
文章目录 前言 数据 Dataset类 DataLoader类 transform 裁剪-Crop 翻转和旋转-Flip and Rotation 图像变换 对transforms操作,使数据增强更灵 ...
- Pytorch模型训练实用教程学习笔记:四、优化器与学习率调整
前言 最近在重温Pytorch基础,然而Pytorch官方文档的各种API是根据字母排列的,并不适合学习阅读. 于是在gayhub上找到了这样一份教程<Pytorch模型训练实用教程>,写 ...
- 快速上手笔记,PyTorch模型训练实用教程(附代码)
机器之心发布 作者:余霆嵩 前言 自 2017 年 1 月 PyTorch 推出以来,其热度持续上升,一度有赶超 TensorFlow 的趋势.PyTorch 能在短时间内被众多研究人员和工程师接受并 ...
- PyTorch 模型训练实用教程(六):监控模型——可视化
本章将介绍如何在 PyTorch 中使用 TensorBoardX 对神经网络进行统计可视化,如Loss 曲线.Accuracy 曲线.卷积核可视化.权值直方图及多分位数折线图.特征图可视化.梯度直方 ...
- 【深度学习】基于PyTorch的模型训练实用教程之数据处理
[深度学习]基于PyTorch的模型训练实用教程之数据处理 文章目录 1 transforms 的二十二个方法 2 数据加载和预处理教程 3 torchvision 4 如何用Pytorch进行文本预 ...
- 【资源下载】《Pytorch模型训练实现教程》(附下载链接)
前言 自 2017 年 1 月 PyTorch 推出以来,其热度持续上升,一度有赶超 TensorFlow 的趋势.PyTorch 能在短时间内被众多研究人员和工程师接受并推崇是因为其有着诸多优点,如 ...
- 手把手教你洞悉 PyTorch 模型训练过程,彻底掌握 PyTorch 项目实战!(文末重金招聘导师)...
(文末重金招募导师) 在CVPR 2020会议接收中,PyTorch 使用了405次,TensorFlow 使用了102次,PyTorch使用数是TensorFlow的近4倍. 自2019年开始,越来 ...
- 【目标检测】基于yolov3的血细胞检测和计数(无bug教程+附代码+数据集)
多的不说,少的不唠,先看检测效果图: 共检测三类:红细胞RBC.白细胞WBC.血小板Platelets Hello,大家好,我是augustqi.今天给大家带来的保姆级教程是:基于yolov3的血细胞 ...
- 【深度学习】Keras加载权重更新模型训练的教程(MobileNet)
[深度学习]Keras加载权重更新模型训练的教程(MobileNet) 文章目录 1 重新训练 2 keras常用模块的简单介绍 3 使用预训练模型提取特征(口罩检测) 4 总结 1 重新训练 重新建 ...
最新文章
- 【亲测可用】用Electron和electron-builder打包Vue项目为exe可执行文件安装包(不推荐,个人觉得没有VNISEdit和NW好用,而且有些配置文件还挺脑残!)
- jQuery添加/改变/移除CSS类
- php 开启fsockopen函数,巧用php的fsockopen函数
- java面向对象编程集合边框_第六章使用java实现面向对象-集合框架
- Python 正则表达式(一)
- 2017-7-8 OpenStack手工+oz自动制作CentOS 7.3镜像
- C++ File:\dd\vctools\vc7libs\..\..\afxwin1.inl Line24
- 计算机上网记录怎么清除,电脑浏览器上网记录怎么删除
- 上位机与PLC基于Fins/UDP通信
- 蘑菇街面经(自己的第一次秋招面试)
- 小学计算机绘图体会,辅导小学生电脑绘画的几点做法
- 为什么要使用dubbo
- 老外眼里的中式英语PK标准英语
- allegro输出gerber过孔盖孔
- ssh 使用新法:公网(合法 ip)用户访问内网(私有 ip)服务器(http,ftp,sshd,cvs...),内网的朋友不妨一看。
- win10读取不了U盘或者移动硬盘的解决方法
- 电影《蓝色大门》有感
- maven 使用记录
- 微信小程序-从零开始制作一个跑步微信小程序 1
- PCA和单位球面上二次型的极大化
热门文章
- 测试唯一ID支持多大的并发量
- Swiper 滚动插件
- mongodb 日常维护
- 仅当使用了列的列表,并且 IDENTITY_INSERT 为 ON 时,才能在表中为标识列指定显式值问题...
- 无头结点的单链表删除一个中间结点
- 浏览器显示html过程,浏览器显示页面的流程
- mysql 存储ts数据_理解性记忆MySQL数据库
- 、简述global关键字的作用_二十三、Python变量作用域(局部变量和全局变量)
- 支持javascript的ppt软件_强大CSS3的3D幻灯片工具reveal.js(推荐)
- yum安装ruby_CentOS 7下配置Ruby语言开发环境的方法教程