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