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

经过了几个月的学习和实践,我完成了优达学城网站上《Python Programming with Python Nanodegree》课程的学习,该课程的终极项目就是使用Pytorch为102种不同类型的花创建一个图像分类器。

在完成这个项目的过程中,我和其他学员一样,都碰到了各种问题和挑战,因此写下了这篇文章。希望你读完这篇文章以后,会对你的机器学习有所裨益。

本文介绍了如何实现图像分类的基础概念,即理解图像内容的算法。本文并不会详细分步说明构建模型的具体步骤,而是从宏观上介绍整个过程,如果你正在学习机器学习或人工智能,相信这篇文章将会对你很有帮助。

在第一部分中,我们将介绍加载预训练的神经网络,为什么要“重用”网络(即使用预训练神经网络),指明哪些部分可以重用,哪些部分不可以重用,以及如何自定义预训练网络。

加载一个预训练网络

“重用”是一个非常合理的策略,特别是当某些工具是大家都认可为标准的时候,“重用”更显得尤为重要。在这个例子中,我们的出发点是torchvision提供的一个模型框架。

现在,我们要做的是加载一个预先训练好的网络,并用自己的网络替换它的分类器,然后,我们就可以训练自己的分类器了。

虽然这个想法很合理,但是也比较麻烦,因为加载一个预先训练好的网络,并不会节省我们训练分类器的工作量。

所以,使用预训练网络到底有什么好处呢?

当我们人类在看图像的时候,我们会识别线条和形状,鉴于此,我们才可以将图像内容与之前看到的内容联系起来。现在,我们希望分类器也能做到这点,但是,图像并不是一个简单的数据,而是由数千个独立的像素组成,每个像素又由3个不同的值组合起来,形成颜色,即红色、绿色和蓝色。

如果我们希望分类器能够处理这些数据,我们要做的就是将每个待处理图像所包含的信息,以分类器可以理解的格式传给分类器,这就是预训练网络发挥作用的地方。

这些预训练网络主要由一组特征检测器和分类器组成,其中,特征检测器被训练成可以从每个图像中提取信息,分类器被训练成理解特征层提供的输入。

在这里,特征检测器已经在ImageNet中接受过训练,并且性能良好,我们希望这点能够继续保持。在训练分类器时,为了防止特征层被篡改,我们得对特征层进行“冻结”,下面这些代码可以很轻松的解决这一问题:

for param in model.parameters():param.requires_grad = False

那么,问题又来了,既然我们可以“重用”特征检测器,我们为什么不能“重用”分类器?要回答这个问题,我们先来看看VGG16架构的默认分类器:

(classifier): Sequential((0): Linear(in_features=25088, out_features=4096, bias=True)(1): ReLU(inplace)(2): Dropout(p=0.5)(3): Linear(in_features=4096, out_features=4096, bias=True)(4): ReLU(inplace)(5): Dropout(p=0.5)(6): Linear(in_features=4096, out_features=1000, bias=True)
)
 

首先,我们没办法保证这些代码能够起作用,在我们特定的环境中,这些默认层、元素、激活函数以及Dropout值并不一定是最佳的。

尤其是最后一层的输出是1000个元素,这就容易理解了。在我们的例子中,我们要对102种不同类型的花进行分类,因此,我们的分类器输出必须是102,而不是1000

从上面VGG16架构的默认分类器中,我们还可以注意到,分类器的输入层有25088个元素,这是特定预训练模型中特征检测器的输出大小,因此,我们的分类器大小也必须要与要特征层的输出相匹配
结论

从上面的分析,本文能够得到以下结论:

1.预先训练好的网络非常有用。使用预训练模型,可以让我们更加专注于我们自己用例的具体细节,还可以重用众所周知的工具,对用例中的图像进行预处理。

2.分类器的输出大小必须与我们希望识别的图像数量相同。

3.特征层的输出和自定义分类器的输入大小必须相匹配。

在下一篇文章中,我们将深入探讨,在训练分类器过程中,如何避免一些常见的陷阱,并学习如何调整超参数,来提高模型的准确性。

 


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

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

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

相关文章

阿里上市,四大洲8个国家的十位代表敲锣;全球首款支持5G双卡双待的芯片发布;撕裂者3990X:桌面史上第一次64核128线程……...

关注并标星星CSDN云计算速递、最新、绝对有料。这里有企业新动、这里有业界要闻,打起十二分精神,紧跟fashion你可以的!每周两次,打卡即read更快、更全了解泛云圈精彩newsgo go govivo X30新细节曝光:搭载潜望式超远摄支…

支付宝客户端架构分析:自动化日志收集及分析

小蚂蚁说: 《支付宝客户端架构解析》系列将从支付宝客户端的架构设计方案入手,细分拆解客户端在“容器化框架设计”、“网络优化”、“性能启动优化”、“自动化日志收集”、“RPC 组件设计”、“移动应用监控、诊断、定位”等具体实现,带领…

在Kubernetes上运行区块链服务(BaaS)

本文是在2018年11月15日由Linux基金会CNCF主办的KubeCon & CloudNativeCon China 2018大会的“Running Blockchain as a Service (BaaS) on Kubernetes”演讲内容基础上整理而成,从技术上介绍了阿里云如何将基于区块链Hyperledger Fabric的BaaS和容器集群技术Ku…

RabbitMQ 镜像集群之同步策略_专栏讲解

文章目录一、 基础知识汲取1.1. 镜像集群简述1.2. 策略参数说明1.3. 策略案例二、HA mode 同步方式2.1. 参数说明2.2. 案例2.3. 命令终端形式2.4. MQ管控台设置2.5. 队列同步2.5. 优缺点三、Ha async mode 同步方式(推荐使用)3.1. 参数说明3.2. 案例3.3.…

bug要改一天?

大家应该都听过下面的一个段子~女生:亲爱的,我来亲戚了男生:多喝热水......女生:我好像要感冒了,亲爱的~男生:多喝热水......女生:我现在好难受哦,快撑不下去了男生:多喝…

新手也能看懂,消息队列其实很简单

本文内容思维导图: 消息队列其实很简单 “RabbitMQ?”“Kafka?”“RocketMQ?”...在日常学习与开发过程中,我们常常听到消息队列这个关键词。我也在我的多篇文章中提到了这个概念。可能你是熟练使用消息队列的老手&am…

如何去设计前端框架能力?星巴克消息开放项目从0到1,从点到面的思考

本文由淘宝前端工程师罗嗣分享,主要讲述了作者在星巴克消息开放项目中的总结和思考,希望对大家有帮助,让业务分享更加有价值。 从满足星巴克项目需求单点出发,发散到从点到面的思考。从而总结了自己思考的基本流程(方法…

如何在springboot中使用PageHelper分页插件

文章目录1. pom依赖2. yml3. 实体类4. mapper映射文件4. mapper接口5. service接口6. 实现类7. controller8. 浏览器验证使用思路: 1.引入myabtis和pagehelper依赖 2.yml中配置mybatis扫描和实体类 3. 这2行代码 pageNum:当前第几页 pageNum:…

6.6折票仅剩3天 | BDTC 2019全日程公布,哪些是你感兴趣的话题?

2019年12月5-7日,由中国计算机学会主办,CCF 大数据专家委员会承办,CSDN、中科天玑数据科技股份有限公司协办的中国大数据技术大会(BDTC 2019)将于北京长城饭店隆重举行。届时,超过百位顶尖技术专家将齐聚于…

java线程条件变量_使用条件变量(多线程笔记)

条件变量属性:使用条件变量可以以原子方式阻塞线程,知道某个特定条件为真为止。条件变量始终与互斥锁一起使用。使用条件变量,线程可以以原子方式阻塞,知道满足某个条件为止。对掉件的测试时在互斥锁的保护下进行的。如果条件为假…

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

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

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

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

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

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

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

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

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

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

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

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

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

ojdbc6.jar下载 Oracle官方宣布的Oracle数据库11g的驱动jar包是ojdbc6.jar ojdbc6.jar下载地址: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…

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

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

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

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

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:plot3 三维曲线图;plot3(x1,y1,z1,x2,y2,z2,…,xn,yn,zn): surf(x,y,z)…