用PyTorch创建一个图像分类器?So easy!(Part 2)

在第一部分中,我们知道了为什么以及如何加载预先训练好的神经网络,我们可以用自己的分类器代替已有神经网络的分类器。那么,在这篇文章中,我们将学习如何训练分类器。

训练分类器

首先,我们需要为分类器提供待分类的图像。本文使用ImageFolder加载图像,预训练神经网络的输入有特定的格式,因此,我们需要用一些变换来调整图像的大小,即在将图像输入到神经网络之前,对其进行裁剪和标准化处理。

具体来说,将图像大小调整为224*224,并对图像进行标准化处理,即均值为 [0.485,0.456,0.406],标准差为[0.229,0.224,0.225],颜色管道的均值设为0,标准差缩放为1。

然后,使用DataLoader批量传递图像,由于有三个数据集:训练数据集、验证数据集和测试数据集,因此需要为每个数据集创建一个加载器。一切准备就绪后,就可以训练分类器了。

在这里,最重要的挑战就是——正确率(accuracy)。

让模型识别一个已经知道的图像,这不算啥事,但是我们现在的要求是:能够概括、确定以前从未见过的图像中花的类型。在实现这一目标过程中,我们一定要避免过拟合,即“分析的结果与特定数据集的联系过于紧密或完全对应,因此可能无法对其他数据集进行可靠的预测或分析”。

隐藏层

实现适当拟合的方法有很多种,其中一种很简单的方法就是:隐藏层

我们很容易陷入这样一种误区:拥有更多或更大的隐藏层,能够提高分类器的正确率,但事实并非如此。

增加隐藏层的数量或大小以后,我们的分类器就需要考虑更多不必要的参数。举个例子来说,将噪音看做是花朵的一部分,这会导致过拟合,也会降低精度,不仅如此,分类器还需要更长的时间来训练和预测。

因此,我建议你从数量较少的隐藏层开始,然后根据需要增加隐藏层的数量或大小,而不是一开始就使用特别多或特别大的隐藏层。

在第一部分介绍的《AI Programming with Python Nanodegree》课程中的花卉分类器项目中,我只需要一个小的隐藏层,在第一个完整训练周期内,就得到了70%以上的正确率。

数据增强

我们有很多图像可供模型训练,这非常不错。如果拥有更多的图像,数据增强就可以发挥作用了。每个图像在每个训练周期都会作为神经网络的输入,对神经网络训练一次。在这之前,我们可以对输入图像做一些随机变化,比如旋转、平移或缩放。这样,在每个训练周期内,输入图像都会有差异。

增加训练数据的种类有利于减少过拟合,同样也提高了分类器的概括能力,从而提高模型分类的整体准确度。

Shuffle

在训练分类器时,我们需要提供一系列随机的图像,以免引入任何误差。

举个例子来说,我们刚开始训练分类器时,我们使用“牵牛花”图像对模型进行训练,这样一来,分类器在后续训练过程中将会偏向“牵牛花”,因为它只知道“牵牛花”。因此,在我们使用其他类型的花进行训练时,分类器最初的偏好也将持续一段时间。

为了避免这一现象,我们就需要在数据加载器中使用不同的图像,这很简单,只需要在加载器中添加shuffle=true,代码如下:

trainloader = torch.utils.data.DataLoader(train_dataset, batch_size=batch_size, shuffle=True)

Dropout

有的时候,分类器中的节点可能会导致其他节点不能进行适当的训练,此外,节点可能会产生共同依赖,这就会导致过拟合。

Dropout技术通过在每个训练步骤中使一些节点处于不活跃状态,来避免这一问题。这样一来,在每个训练阶段都使用不同的节点子集,从而减少过拟合。

除了过拟合,我们一定要记住,学习率( learning rate )是最关键的超参数。如果学习率过大,模型的误差永远都不会降到最小;如果学习率过小,分类器将会训练的特别慢,因此,学习率不能过大也不能过小。一般来说,学习率可以是0.01,0.001,0.0001……,依此类推。

最后,在最后一层选择正确的激活函数会对模型的正确率会产生特别大的影响。举个例子来说,如果我们使用 negative log likelihood loss(NLLLoss),那么,在最后一层中,建议使用LogSoftmax激活函数。

结论

理解模型的训练过程,将有助于创建能够概括的模型,在预测新图像类型时的准确度更高。

在本文中,我们讨论了过拟合将会如何降低模型的概括能力,并学习了降低过拟合的方法。另外,我们也强调了学习率的重要性及其常用值。最后,我们知道,为最后一层选择正确的激活函数非常关键。

现在,我们已经知道应该如何训练分类器,那么,我们就可以用它来预测以前从未见过的花型了!

 

原文链接
本文为云栖社区原创内容,未经允许不得转载。

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

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

相关文章

涨姿势,一个通信项目从开始到结束,原来还包括这些工作

戳蓝字“CSDN云计算”关注我们哦!作者 | 小枣君责编 | 阿秃本月12日,中国移动31个省的通信工程设计与可行性研究集采正式启动。这次集采规模庞大,涵盖了无线网(5G、FDD、NB等)、核心网、承载网、支撑网等专业方向,预估基本规模超4…

spring项目链接RabbitMQ集群

文章目录1.pom2. spring-rabbitmq-producer.xml3. spring-rabbitmq-consumer.xml4. rabbitmq.properties1.pom <!--spring整合rabbitmq--><dependency><groupId>com.rabbitmq</groupId><artifactId>amqp-client</artifactId><version&g…

听说支付宝有一个“疯起来连自己都打”的项目

小蚂蚁说&#xff1a; 自古红蓝出CP&#xff0c;在蚂蚁金服就有这样两支“相爱相杀”的队伍——红军和蓝军。蓝军是进攻方&#xff0c;主要职责是挖掘系统的弱点并发起“真实”的攻击&#xff0c;俗称“找茬”&#xff1b;红军则是防守方&#xff0c;其防控体系建设中的实时核…

蚂蚁金服红蓝军技术攻防演练究竟有多“狠”

如果一个技术团队不干别的&#xff0c;专门“搞破坏”&#xff0c;这是一种怎样的存在&#xff1f;这真的不是“天方夜谭”&#xff0c;在支付宝确实有这么一支队伍——技术蓝军。蓝军的任务就是不断地攻击和进攻&#xff0c;而防守方则是技术红军。在支付宝&#xff0c;蓝军从…

java虚拟机中xms_java JVM虚拟机选项: Xms Xmx PermSize MaxPermSize 区别

java虽然是自动回收内存&#xff0c;但是应用程序&#xff0c;尤其服务器程序最好根据业务情况指明内存分配限制。否则可能导致应用程序宕掉。举例说明含义&#xff1a;-Xms128m表示JVM Heap(堆内存)最小尺寸128MB&#xff0c;初始分配-Xmx512m表示JVM Heap(堆内存)最大允许的尺…

linux 目录挂载

背景&#xff1a;文件服务器200G&#xff0c;日志大小已经超过200G&#xff0c;使用率达到100% 解决方案&#xff1a; nas挂载&#xff0c;申请的挂载磁盘空间1T 挂载声明&#xff1a; 当执行挂载命令后&#xff0c;本地挂载的原目录下面是空的 只有解挂后&#xff0c;以前目录…

阿里巴巴在内蒙古旱区试水物联网灌溉技术,一年省出1.5个西湖

阿里巴巴正用物联网技术解决干旱地区的灌溉问题&#xff0c;通过搭建农业物联网平台&#xff0c;全面监测农作物的生长状态&#xff0c;从而匹配最节约的灌溉方案。12月19日试验区研究人员得出预测结果&#xff1a;一年可以省出1.5个西湖的水。 一直以来干旱是困扰人类的重要环…

不少人暗搓搓的准备春招了,我有一些好东东和招聘信息给你

2017远去了&#xff01;2018远去了&#xff01;&#xff01;很快&#xff0c;2019 也要远去了&#xff01;&#xff01;&#xff01;被各种裁员和寒冬扎心的老铁&#xff0c;你还在犹豫什么&#xff1f;赶紧学习起来&#xff0c;找份靠谱的工作吧&#xff01;找工作这件事&…

网易考拉在服务化改造方面的实践

导读&#xff1a; 网易考拉&#xff08;以下简称考拉&#xff09;是网易旗下以跨境业务为主的综合型电商&#xff0c;自2015年1月9日上线公测后&#xff0c;业务保持了高速增长&#xff0c;这背后离不开其技术团队的支撑。微服务化是电商IT架构演化的必然趋势&#xff0c;网易…

Oracle 11g Java驱动包ojdbc6.jar安装到maven库,并查看jar具体版本号

ojdbc6.jar下载 Oracle官方宣布的Oracle数据库11g的驱动jar包是ojdbc6.jar ojdbc6.jar下载地址&#xff1a;https://www.oracle.com/technetwork/database/enterprise-edition/jdbc-112010-090769.html (Oracle Database 11g Release 2 (11.2.0.4) JDBC Drivers & UCP Do…

java 异常补偿解决_第三方接口调用异常补偿机制实现实例记录

背景&#xff1a;我们的组件(简称A)&#xff0c;在业务链中属于数据支撑节点。其中与组件B存在接口同步数据的直接关系(API接口直接调用进行数据交互)问题&#xff1a;我们的上游有另一个组件C(带有界面)&#xff0c;调用A(us)进行数据的变更操作&#xff0c;此时需要A调用B服务…

阿里重磅开源Blink:为什么我们等了这么久?

12月20日&#xff0c;由阿里巴巴承办的 Flink Forward China 峰会在北京国家会议中心召开&#xff0c;来自阿里、华为、腾讯、美团点评、滴滴、字节跳动等公司的技术专家与参会者分享了各公司基于 Flink 的应用和实践经验。 感兴趣的开发者可以看云栖社区的对于大会的主会5场分…

支持OpenStack,红帽将开源进行到底

戳蓝字“CSDN云计算”关注我们哦&#xff01;作者 | 刘丹责编 | 阿秃出品 | CSDN云计算&#xff08;ID&#xff1a;CSDNcloud&#xff09;早在去年&#xff0c;红帽全球副总裁兼中国区总裁曹衡康表示&#xff0c;红帽已经转型了&#xff0c;不仅是Linux&#xff0c;红帽是全球最…

GAN是一种特殊的损失函数?

数据科学家Jeremy Howard在fast.ai的《生成对抗网络&#xff08;GAN&#xff09;》课程中曾经讲过这样一句话&#xff1a; “从本质上来说&#xff0c;生成对抗网络&#xff08;GAN&#xff09;是一种特殊的损失函数。” 你是否能够理解这句话的意思&#xff1f;读完本文&…

matlab 三维 作图 坐标轴_这张图(不全),想利用matlab画一张三维图,X Y z 轴分别为经度 纬度 频率,这...

xrangeminx:dx:maxx; yrangeminy:dy:maxy;[X,Y] meshgrid(xrange,yrange);griddata(lon,lat,SST,X,Y);mesh(X,Y,Z), hold onplot3(lon,lat,SST,o),hold offmatlab 作图方法2113&#xff1a;plot3 三维曲线图&#xff1b;plot3(x1,y1,z1,x2,y2,z2,…,xn,yn,zn): surf(x,y,z)…

(Python)零起步数学+神经网络入门

在这篇文章中&#xff0c;我们将在Python中从头开始了解用于构建具有各种层神经网络&#xff08;完全连接&#xff0c;卷积等&#xff09;的小型库中的机器学习和代码。最终&#xff0c;我们将能够写出如下内容&#xff1a; 假设你对神经网络已经有一定的了解&#xff0c;这篇文…

必须要看的网上冲浪安全攻略!

戳蓝字“CSDN云计算”关注我们哦&#xff01;作者 | Nirnay Butle翻译&#xff5c;风车云马责编 | 阿秃出品 | CSDN云计算&#xff08;ID&#xff1a;CSDNcloud&#xff09;不管我们是不是技术迷&#xff0c;无可否认的是&#xff0c;现在我们各自的生活都对互联网产生了高度依…

当自己犹豫时,坐下来读一读

物来顺应&#xff1a;事情已经过去了&#xff0c;就不要纠结&#xff0c;应该顺应和面对 未来不迎&#xff1a;千万不要为了没有发生的事&#xff0c;而感到焦虑 当时不杂&#xff1a;专注于做好当前的事&#xff0c;不要三心二意 既过不恋&#xff1a;已经过去的事情&#…

java ajax查询_java-如何计时ajax查询(发送查询,处理,接收响应)

编辑以澄清我的意图&#xff1a;(基于初始答案)我有一个网络应用程序.该服务器由一组Java POJO组成,我正在使用Jersey将它们公开为REST API.浏览器使用jquery ajax调用这些API,并执行操作.我想记录我的Ajax查询所用的持续时间,并希望细分>将查询从浏览器发送到服务器花费了多…