pytorch进行图像分类的流程,下一篇为实例源代码解析
一、预处理部分
1.拿到数据首先对数据进行分析
对数据的分布有一个大致的了解,可以用画图函数查看所有类的分布情况。可以采取删除不合理类的方法来提高准确率;
对图像进行分析,在自定义的图像增强的多种方式中,尝试对图像进行变换,看是否存在主观上的特征增强,具体的增强
方法在aug.py文件中,可以在线下对数据进行测试,看是否在增强后对结果有好的影响。
2.模型的选取
依据新模型效果较好的原则,尽量选取已存在的最新模型,可以选取进几年再imagenet比赛上取得最好的效果的几种模型
分别进行测试,目前效果最好的模型是resnet(深度残差网络),是卷积神经网络的最新发展;
但仅仅单模型的效果肯定是不如多模型综合的效果好的,所以可以选取效果较好的几种模型,最后按其权重进行加权平均
来获取最终的预测结果;
始终要注意的一点是,模型是次要的,最主要最核心的问题还是在于对于数据的处理。
3.处理数据
对数据图像进行增强,不管是使用pytorch自带的transform模块,还是自定义的数据增强处理方式,都要对数据进行合理的
改变,最基本的改变是对图像进行简单的随机翻转、切割、旋转等,还有要注意的一点是需要改变图像的尺寸,以适应模型
的输入要求。
本次比赛数据进行的增强方式有:
- RandomRotation(30)
- RandomHorizontalFlip()
- RandomVerticalFlip()
- RandomAffine(45)
4.超参数的设置
对于整体代码中所需要的超参数进行单独处理,设置在一个文件中,使用时候直接调用即可。
二、输入数据进入模型进行训练
1.划分数据集
首先根据所给文件把每个类的图像都分类到各自的文件夹中去,模型的输入要求类型基本都是这样,然后对于数据集划分为
训练集、测试集、验证集,分别在模型的训练、测试阶段使用。
2.模型训练
根据pytorch的模型训练过程,输入训练集,对模型进行训练,每个epoch后对模型进行评价,在整个epoch结束后,得到最好
的模型。
3.测试阶段
把测试集输入保存的最好模型中去,得到输出结果,进行分析。
三、pytorch中的训练模块化
1.加载模型
2.优化器和loss函数的设置
3.训练集加载入pytorch的数据加载类Dataloader中,以便于调用
4.开始每个epoch的训练,输入,目标,loss,归零,反向传播,开始
5.评估模型,得出最优模型
参考大神chaojiezhu的github。
https://github.com/spytensor/plants_disease_detection
pytorch进行图像分类的流程,下一篇为实例源代码解析的更多相关文章
- 通过重建Hosting系统理解HTTP请求在ASP.NET Core管道中的处理流程[下]:管道是如何构建起来的?
在<中篇>中,我们对管道的构成以及它对请求的处理流程进行了详细介绍,接下来我们需要了解的是这样一个管道是如何被构建起来的.总的来说,管道由一个服务器和一个HttpApplication构成 ...
- android7.x Launcher3源代码解析(3)---workspace和allapps载入流程
Launcher系列目录: 一.android7.x Launcher3源代码解析(1)-启动流程 二.android7.x Launcher3源代码解析(2)-框架结构 三.android7.x L ...
- [源码解析] PyTorch 分布式 Autograd (6) ---- 引擎(下)
[源码解析] PyTtorch 分布式 Autograd (6) ---- 引擎(下) 目录 [源码解析] PyTtorch 分布式 Autograd (6) ---- 引擎(下) 0x00 摘要 0 ...
- PyTorch在64位Windows下的Conda包(转载)
PyTorch在64位Windows下的Conda包 昨天发了一篇PyTorch在64位Windows下的编译过程的文章,有朋友觉得能不能发个包,这样就不用折腾了.于是,这个包就诞生了.感谢@晴天14 ...
- 从零教你使用MindStudio进行Pytorch离线推理全流程
摘要:MindStudio的是一套基于华为自研昇腾AI处理器开发的AI全栈开发工具平台,该IDE上功能很多,涵盖面广,可以进行包括网络模型训练.移植.应用开发.推理运行及自定义算子开发等多种任务. 本 ...
- 调用altera IP核的仿真流程—下
调用altera IP核的仿真流程—下 编译 在 WorkSpace 窗口的 counter_tst.v上点击右键,如果选择Compile selected 则编译选中的文件,Compile All是 ...
- 基于modelsim-SE的简单仿真流程—下
基于modelsim-SE的简单仿真流程—下 编译 在 WorkSpace 窗口的 counter_tst.v上点击右键,如果选择Compile selected 则编译选中的文件,Compile A ...
- phpcms新闻详情页上一篇下一篇的实现
在新闻详情页(show.html或show_*.html) 只需要添加类似如下代码即可: <div>上一篇:<a href="{$previous_page[url]}&q ...
- PHPCMS 实现上一篇、下一篇
方法一:直接调用phpcms系统的函数 <div class="info"> <span>上一篇:<a href="{$previous_p ...
随机推荐
- ado.net EF学习系列----深入理解查询延迟加载技术(转载)
ado.net EF是微软的一个ORM框架,使用过EF的同学都知道EF有一个延迟加载的技术. 如果你是一个老鸟,你可能了解一些,如果下面的学习过程中哪些方面讲解的不对,欢迎批评指教.如果一个菜鸟,那我 ...
- dma传输数据长度,在启动前必须确保是一个大于0的数字
否则将导致不能接受数据
- Codeforces 660C - Hard Process - [二分+DP]
题目链接:http://codeforces.com/problemset/problem/660/C 题意: 给你一个长度为 $n$ 的 $01$ 串 $a$,记 $f(a)$ 表示其中最长的一段连 ...
- JSP+Servlet+JavaBean实现数据库的增删改查
基本思想:JSP文件显示页面,使用form或href超链接传值到Servlet中方法,在Servlet方法中调用Dao层的类对象,实现对数据库里的数据的增删改查,之后重新返回到JSP输出操作完的结果. ...
- 对内存分配的理解 自动变量 局部变量 临时变量 外部变量 字符串长度 C语言可以看成由一些列的外部对象构成
Status ListInsert_Sq(SqList *L,int i,LElemType_Sq e) { LElemType_Sq *newbase; LElemType_Sq *p,*q; if ...
- MySQL之更新型触发器
DELIMITER || CREATE TRIGGER tri_video_class AFTER UPDATE ON 数据库名.表名称 FOR EACH ROW begin IF((old.stat ...
- mysql中建立索引的一些原则
1.先存数据,再建索引 有索引的好处是搜索比较快但是在有索引的前提下进行插入.更新操作会很慢 2.不要对规模小的数据表建立索引,数据量超过300的表应该有索引:对于规模小的数据表建立索引 不仅不会提高 ...
- [troubleshoot][automake] automake编译的时候发生死循环
在某台特有设备上,编译dssl工程时,竟然发生了死循环. https://github.com/tony-caotong/libdssl 错误日志如下: checking zlib.h presenc ...
- LeetCode 883 Projection Area of 3D Shapes 解题报告
题目要求 On a N * N grid, we place some 1 * 1 * 1 cubes that are axis-aligned with the x, y, and z axes. ...
- FreeMarker详解
什么是 FreeMarker? FreeMarker 是一款 模板引擎: 即一种基于模板和要改变的数据, 并用来生成输出文本(HTML网页,电子邮件,配置文件,源代码等)的通用工具. 它不是面向最终用 ...