来源
最近在学习图像分类的相关知识,卷积是其中不可忽略的技术
b站up主:霹雳吧啦Wz
他的CSDN:太阳花的小绿豆
github:https://github.com/WZMIAOMIAO/deep-learning-for-image-processing
学习链接:https://blog.csdn.net/qq_37541097/article/details/103482003
https://blog.csdn.net/m0_37867091/article/details/107136477
什么是卷积神经网络
包含了卷积层的神经网络都可以理解为卷积神经网络
卷积层
![](https://i-blog.csdnimg.cn/blog_migrate/beab50bcc218c962c2fd98ebc146169b.png)
卷积:卷积核覆盖到计算的特征值上,将卷积核上的值与特征值上的值相乘,最后相加
卷积目的:图像特征提取
卷积特性:局部感知,权值共享
![](https://i-blog.csdnimg.cn/blog_migrate/13f836927f6a70740b8a4991a032f4a4.png)
输入:具有RGB三通道的图像
卷积核的深度要和输入图像的深度保持一致,三通道图像需要三维的卷积核
将卷积核分别放在RGB三通道上,进行对应元素相乘相加,最后再将三个通道卷积后的值相加,得到特征矩阵
卷积核的channel与输入特征层的channel相同
输出的特征矩阵channel与卷积核个数相同
padding操作,并计算卷积后的特征矩阵大小
![](https://i-blog.csdnimg.cn/blog_migrate/ab8c734a7fd6868ac62352ab2eecae3a.png)
常用的激活函数
为什么要引入激活函数?
在计算过程中是一个线性计算的过程,通过激活函数引入非线性因素,使其具备解决非线性问题的能力
常用的激活函数有两种:Sigmoid激活函数和Relu激活函数
![](https://i-blog.csdnimg.cn/blog_migrate/e427b3b6807dcf2f621d41440f1d50c0.png)
池化层
池化目的:对特征图进行稀疏处理,减少数据运算量
池化特征:没有训练参数;只改变特征矩阵的高和宽,不改变通道;一般池化size和stride相同
常用的两种池化:最大池化,平均池化
![](https://i-blog.csdnimg.cn/blog_migrate/9261cff935eec08ac38fc2381592148d.png)
![](https://i-blog.csdnimg.cn/blog_migrate/0060f371a4ad1cb5c6563970655a7218.png)
误差计算
![](https://i-blog.csdnimg.cn/blog_migrate/297a76b9a2ab8e2f656c3589fcfe7b56.png)
分类问题多用交叉熵损失
Softmax输出:类别之间无交叉(类别之间互斥),如,猫和狗
Sigmoid输出:类别之间有交叉,如,人类和男人
权重的更新
![](https://i-blog.csdnimg.cn/blog_migrate/3db588a7f20200da7b7d351502f4151c.png)
![](https://i-blog.csdnimg.cn/blog_migrate/3e64d5e8bc9eba2a7a2b2cc25563f7e8.png)
![](https://i-blog.csdnimg.cn/blog_migrate/c709a198ba97f54fc99adb347ae618e2.png)
最常用的优化器:SGD+Momentnum
![](https://i-blog.csdnimg.cn/blog_migrate/48bf8b7aa8341de3fc5b17ef0f87306f.png)
![](https://i-blog.csdnimg.cn/blog_migrate/495a837cb10f0b1c338db53020b6673a.png)
![](https://i-blog.csdnimg.cn/blog_migrate/7d49436ce181215d408b0f2c7f105323.png)
![](https://i-blog.csdnimg.cn/blog_migrate/e940bd3b385434fc029f2e6066491ee1.png)
总结
卷积核改变channel数,卷积核的数量 = 输出的channel数
nn.Conv2d(输入channel数量,卷积核数量,卷积核大小)
如,nn.Conv2d(3, 16, 5),输入三通道图像,采用16个5x5卷积核,输出通道变为16
池化层不改变channel数量,改变图像的高和宽
nn.MaxPool2d(池化size,stride)
全连接层,输入输出是一维向量,需要进行flatten操作
nn.Linear(3*32*32, 120)
在计算交叉熵的内部已经实现了softmax,不需要再额外添加softmax
loss_function = nn.CrossEntropyLoss()
outputs = net(inputs)
loss = loss_function(outputs, labels)
loss.backward()
定义优化器,net.parameters()是模型中需要训练的参数,lr是学习率
optimizer = optim.Adam(net.parameters(), lr=0.001)
optimizer.step()