PyTorch使用总览

https://www.cnblogs.com/DicksonJYL/p/9576835.html

深度学习框架训练模型时的代码主要包含数据读取、网络构建和其他设置三方面,基本上掌握这三方面就可以较为灵活地使用框架训练模型。PyTorch是Facebook的官方深度学习框架之一,到现在开源1年时间,势头非常猛,相信使用过的人都会被其轻便和快速等特点深深吸引,因此这篇博客从整体上介绍如何使用PyTorch

PyTorch的官方github地址:https://github.com/pytorch/pytorch
PyTorch官方文档:http://pytorch.org/docs/0.3.0/

建议先看看:PyTorch学习之路(level1)——训练一个图像分类模型,对Pytorch的使用有一个快速的了解。

接下来就按照上述的3个方面来介绍如何使用PyTorch。

一、数据读取

数据读取部分包含如何将你的图像和标签数据转换成PyTorch框架的Tensor数据类型,官方代码库中有一个接口例子:torchvision.ImageFolder,这个接口在PyTorch学习之路(level1)——训练一个图像分类模型 中有简单介绍。因为这个接口针对的数据存放方式是每个文件夹包含一个类的图像,但是实际应用中可能你的数据不是这样维护的,或者你的数据是多标签的,或者其他更复杂的形式,那么就需要自定义一个数据读取接口,这个时候就不得不提一个PyTorch中数据读取基类:torch.utils.data.Dataset,包括前面提到的torchvision.ImageFolder接口的对应类也是继承torch.utils.data.Dataset实现的,因此torch.utils.data.Dataset类是PyTorch框架中数据读取的核心。那么如何自定义一个数据读取接口呢?可以看博客: PyTorch学习之路(level2)——自定义数据读取,这篇博客中从剖析torchvision.ImageFolder接口切入,然后引出如何自定义数据读取接口。这样就完成了数据的第一层封装。

在自定义数据读取接口时还有一步很重要的操作:数据预处理。常常我们在论文中看到的data argumentation就是指的数据预处理,对实验结果影响还是比较大的。该操作在PyTorch中可以通过torchvision.transforms接口来实现,具体请看博客:PyTorch源码解读之torchvision.transforms 的介绍。

经过上述的两个操作后,还需再进行一次封装,将数据和标签封装成数据迭代器,这样才方便模型训练的时候一个batch一个batch地进行,这就要用到torch.utils.data.DataLoader接口,该接口的一个输入就是前面继承自torch.utils.data.Dataset类的自定义了的对象(比如torchvision.ImageFolder类的对象),具体可以参考博客: PyTorch源码解读之torch.utils.data.DataLoader

至此,从图像和标签文件就生成了Tensor类型的数据迭代器,后续仅需将Tensor对象用torch.autograd.Variable接口封装成Variable类型(比如train_data=torch.autograd.Variable(train_data),如果要在gpu上运行则是:train_data=torch.autograd.Variable(train_data.cuda()))就可以作为模型的输入了。

其他自定义的数据读取接口例子可以参考:https://github.com/miraclewkf/MobileNetV2-PyTorch,该项目中的read_ImageNetData.py脚本自定义了读取ImageNet数据集的接口,训练数据的读取和验证数据的读取采取不同的接口实现,比较有特点。

二、网络构建

PyTorch框架中提供了一些方便使用的网络结构及预训练模型接口:torchvision.models,具体可以看博客:PyTorch源码解读之torchvision.models。该接口可以直接导入指定的网络结构,并且可以选择是否用预训练模型初始化导入的网络结构。

那么如何自定义网络结构呢?在PyTorch中,构建网络结构的类都是基于torch.nn.Module这个基类进行的,也就是说所有网络结构的构建都可以通过继承该类来实现,包括torchvision.models接口中的模型实现类也是继承这个基类进行重写的。自定义网络结构可以参考:1、https://github.com/miraclewkf/MobileNetV2-PyTorch。该项目中的MobileNetV2.py脚本自定义了网络结构。2、https://github.com/miraclewkf/SENet-PyTorch。该项目中的se_resnet.py和se_resnext.py脚本分别自定义了不同的网络结构。

如果要用某预训练模型为自定义的网络结构进行参数初始化,可以用torch.load接口导入预训练模型,然后调用自定义的网络结构对象的load_state_dict方式进行参数初始化,具体可以看https://github.com/miraclewkf/MobileNetV2-PyTorch项目中的train.py脚本中if args.resume条件语句。

三、其他设置

优化函数通过torch.optim包实现,比如torch.optim.SGD()接口表示随机梯度下降。更多优化函数可以看官方文档:http://pytorch.org/docs/0.3.0/optim.html

学习率策略通过torch.optim.lr_scheduler接口实现,比如torch.optim.lr_scheduler.StepLR()接口表示按指定epoch数减少学习率。更多学习率变化策略可以看官方文档:http://pytorch.org/docs/0.3.0/optim.html

损失函数通过torch.nn包实现,比如torch.nn.CrossEntropyLoss()接口表示交叉熵等。

多GPU训练通过torch.nn.DataParallel接口实现,比如:model = torch.nn.DataParallel(model, device_ids=[0,1])表示在gpu0和1上训练模型。

Pythorch使用总览相关推荐

  1. getinstance方法详解_二、设计模式总览及工厂模式详解

    二.架构师内功心法之设计模式 2.架构师内功心法之设计模式 2.1.课程目标 1.通过对本章内容的学习,了解设计模式的由来. 2.介绍设计模式能帮我们解决哪些问题. 3.剖析工厂模式的历史由来及应用场 ...

  2. 三维点云语义分割总览

    点云PCL免费知识星球,点云论文速读. 标题:三维点云语义分割总览 作者:吉祥街 欢迎各位加入免费知识星球,获取PDF文档,欢迎转发朋友圈,分享快乐. 希望有更多的小伙伴能够加入我们,一起开启论文阅读 ...

  3. 程序员新手 0年份等级 指导(一) 开发人员IT架构总览

    程序员新手 0年份等级 指导(一) 开发人员IT架构总览 程序员新手 0年份等级 指导(一) 开发人员相关IT架构总览之职能分解 开发人员IT架构总览 一.职能分解 软件项目的主要组成大体上按照一个项 ...

  4. GdiPlus[6]: 五种画刷总览

    为什么80%的码农都做不了架构师?>>>    GDI+ 有五种画刷: 实心画刷: IGPSolidBrush 阴影画刷: IGPHatchBrush 纹理画刷: IGPTextur ...

  5. 「任务总览」优化更新,团队协作愈加高效敏捷

    做工作汇报时,我们总是需要说清楚各工作的进度,汇报的方法不同,能达到的结果也不同. 其实,在工作中,无论是上级领导亦或是协作的同事,都特别喜欢那种一眼能看出工作进度的图表--「任务总览」甘特图,你是否 ...

  6. PacBio软件总览 - 初级分析

    PacBio软件总览 - 初级分析 PacBio® RS Software Overview PacBio运行的整个流程是什么?每一步都用到了什么软件? PacBio软件套件 RS Remote:De ...

  7. 【FPGA】SRIO IP核系统总览以及端口介绍(二)(I/O Port 含义介绍)

    上篇博文:[FPGA]SRIO IP核系统总览以及端口介绍(一)(User Interfaces 之 I/O Port)根据数据手册PG007,介绍到了逻辑层接口的IO口,今天想研究下,这些端口如何使 ...

  8. 【FPGA】SRIO IP核系统总览以及端口介绍(一)(User Interfaces 之 I/O Port)

    系统总览 RapidIO标准分为三层:逻辑,传输和物理. 逻辑层定义整体协议和数据包格式. 这是端点启动和完成事务(transaction)所必需的信息. 传输层提供数据包从端点移动到端点所需的路由信 ...

  9. Android Jetpack组件总览

    1.前言 最近简单看了下google推出的框架Jetpack,感觉此框架的内容可以对平时的开发有很大的帮助,也可以解决很多开发中的问题,对代码的逻辑和UI界面实现深层解耦,打造数据驱动型UI界面. A ...

最新文章

  1. gatb_core_components
  2. java array arraylist_java 基础 array arraylist..越详细越好。
  3. 20155328 《信息安全系统设计基础》 课程总结
  4. 软件开发模型之优缺点
  5. webuploader在bootstrap模态对话框中选择文件按钮无效的问题
  6. boost::system模块实现动态链接库的测试程序
  7. 做人工智能必看的 45 篇论文,附下载地址 | 文末有彩蛋
  8. 思科携手中兴掌握3G话语权 剑指华为3COM组合
  9. Java日志框架介绍
  10. java网上商城外文翻译_英语文献翻译网上商城java.doc
  11. java B2B2C Springboot仿淘宝电子商城系统(六)springboot整合mybatis
  12. CSS行高line-height属性理解及应用
  13. Matlab学习:读取excel中数据
  14. ubuntu下安装运行电路仿真软件ngspice,打通KiCAD上手指南
  15. 流程制造行业信息系统 架构
  16. Word2010如何隐藏去掉回车符
  17. zsh: illegal hardware instruction
  18. Linux——赋予普通用户root的权限
  19. k8s学习-kubectl命令常用选项详解与实战
  20. SQL Server 查看被锁的表

热门文章

  1. 中科院冯洋| Prefix-to-Prefix生成:进展、挑战与展望
  2. 人工智能的大统一理论? | 智源大会-「人工智能的数理基础」专题论坛
  3. 中国、意大利等国研究员用AI 发现新的月球陨石坑 | AI日报
  4. 北京智源大会 | AI + 医疗的下一个十年:从公共卫生预警到人类基因密码破解...
  5. 算法——计算的灵魂(《算法》一本写了近40年的书)
  6. 他给女朋友做了个树莓派复古相机,算法代码可自己编写,成本不到700元
  7. Yann Lecun最新演讲:机器怎样进行有效学习?
  8. 清华大学:2021 元宇宙研究报告!
  9. 资源|最好的九张机器学习/深度学习代码速查表,附高清下载
  10. 中国团队狂揽5项大奖!北航团队获2021 ACM MultiMedia唯一最佳论文奖