从零开始做pytorch猫狗分类器(一)

从零开始做pytorch猫狗分类器 (1)

对于一个pytorch初学者来说,迈进大门的第一步也许就是做一个猫狗分类器了,
可是网上的猫狗分类教程实在是有点少,而且一般都是直接上代码,让人没有独立思考的空间,本系列教程分2篇,第一篇(这一篇)来讲猫狗分类器的主要流程
第二篇就是上代码了。

加载图片

在这第一篇内,并不会讲到如何加载图片集,在第二篇教程中,我们将用ImageFolder和DataLoader来加载并打包成批处理文件,每张照片要统一为256*256像素,那么总结一下

用ImageFloader拿到照片
将照片统一规格为256*256
用DataLoader将图片打包

log_softmax和ReLU方法

我们不从数学的角度理解log_softmax方法,我们要清楚的知道,这个方法是把X个数值转换为百分比,百分比会随着一轮一轮的学习变得精确
ReLU方法的数学公式是 RuLU(x) = Max(0,x),他将零以上的部分保留,零以下的部分直接清零,如:
x = [0,-1,3,4,19,-78,-0.01,8]
ReLU(x) = [0,0,3,4,19,0,0,8]

搭建神经网络

下一步就是搭建一套神经网络,这是最主要的,就好比一个身体强壮的人不能没有一个好脑子。
神经网络做的是接受,理解和输出,它接收到N个神经元,不断地用神经层连接起来,最后输出X个神经元。

我们假设我们的猫狗图片是2242243像素的,那么神经网络的第一层就应该接收
150528(这个数是2242243算出来的)个数字,为了确保神经网络的准确性,我们用四层神经层连接起来,最后用log_softmax方法输出两个百分比,分别来表式,其他神经层都经过ReLU方法,我们把这个神经网络起名叫AI,中文流程如下

AI=神经网络{
第一层:接受150528个数值,输出500个数值;
第二层:接受500个数值,输出128个数值;
第三层:接受128个数值,输出64个数值;
第四层:接受64个数值,返回2个数值
x = ReLU(第一层(x))
x = ReLU(第二层(x))
x = ReLU(第三层(x))
x = log_softmax(第四层(x))
}

优化器和损失函数

优化器和损失函数也是一个很重要的东西,没有他们,神经网络就无法学习

损失函数干的是把大脑(神经网络)给的值和真正的值算误差,然后给优化器

优化器干的就是把损失函数给的误差进行反向传递,优化大脑(神经网络),他还有一个超参数lr,这个数值一般为小于1的数,这个值越高神经网络学习的就越快,但是会变得很不准确,所以本文用0.02作为lr.

那么中文流程如下

创建用于AI的优化器,lr=0.02
创建损失函数

主流程

接下来就是最主要的了,我们要把整个代码的流程写下来,然后在教程第二章用编程“翻译”出来。

用ImageFloader拿到照片
将照片统一规格为256*256
用DataLoader将图片打包

AI=神经网络{
第一层:接受150528个数值,输出500个数值;
第二层:接受500个数值,输出128个数值;
第三层:接受128个数值,输出64个数值;
第四层:接受64个数值,返回2个数值
x = ReLU(第一层(x))
x = ReLU(第二层(x))
x = ReLU(第三层(x))
x = log_softmax(第四层(x))
}
创建用于AI的优化器,lr=0.02
创建损失函数

循环15:
	从DataLoader中拿到64张照片:  #训练
		AI算出来的类别 = AI(照片)
		用损失函数计算AI算出的标签和真实的标签的误差
		对误差进行反向传播
		优化器进行优化
	从DataLoader中拿到64张照片:  #测试
		AI算出来的类别 = AI(照片)
		用损失函数计算AI算出的标签和真实的标签的误差
		打印出误差

好了,本期教程就到这里,第二篇教程将会带大家真正的打出
完整的代码,如果大家喜欢我的文章,可以评论关注支持一下,我们下期再见!

你可能感兴趣的:(从零开始做猫狗分类器)