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

8d7dfe54d0d68e3b2bb3faba2c39439f2251b796

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

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

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

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

加载一个预训练网络

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

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

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

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

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

0039df2a734fd1698226e11184dc1d9b6990cf67

从左到右,依次为:原始图像,红色,绿色,蓝色。

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

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

在这里,特征检测器已经在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.特征层的输出和自定义分类器的输入大小必须相匹配。

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


本文由北邮@爱可可-爱生活 老师推荐,阿里云云栖社区组织翻译。

文章原标题《Implementing an Image Classifier with PyTorch

译者:Mags,审校:袁虎。

文章为简译,更为详细的内容,请查看原文

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值