目标检测和图像分割挺像。有人把这两个结合,做出了不错的效果。
tensorflow.google.cn
pytorch.org 但是中文文档版本比较老
所需环境
卷积神经网络基础知识
全连接层
由许许多多的神经元共同连接而得来的
实例
读入一张彩色的RGB图像,可看到每个像素里面都包含三个尺度:R、G、B分量。
进行灰度化后,每个像素值都只有一个分量了。
进行二值化处理,得到一个黑白图像。
使用五行三列的滑动窗口在整个图像上滑动,每滑动到一个地方就计算白色像素占整个像素的比例。
第五个:如果仍按照53的滑动窗口滑动,就越界了。可以在右边补一列0(或者提前判断,要越界了,就把这个变成52的窗口)
使用此方法遍历饿到5*5的矩阵。
按行展开,拼接成行向量(1行25列)。
可以把这个行向量作为神经网络的输入层。
得到每个数字的one-hot编码,则不会有重复了。
作为输出。
输入ok+输出ok --> 可对神经网络进行训练了。
中间的隐层按实际需要设置
卷积层
卷积:滑动窗口在特征图上滑动并计算
输入一张彩色的RGB图像,则它就有RGB三个分量。
卷积核的深度也要与输入特征矩阵的深度保持一致,所以这里也是三维的。
将卷积核的每一个维度放到对应维度上进行滑动卷积。
最后进行求和操作,就得到了一个输出矩阵。
(相同颜色求卷积,最后再相加,默认步长为1)
将这两个卷积核弄出的输出矩阵拼接,就得到了整个输出的特征矩阵。
1、加上偏置:
2、加上激活函数:
介绍激活函数:
计算是线性过程。应该引入非线性过程使其具备解决非线性问题的能力。–> 通过非线性函数达到目的。
(
这一块主要还是如果没有非线性层的话,多层的网络就可以通过矩阵乘法转变成单层网络,失去了网络的深度了
)
实际应用中,Relu函数的使用较多。
一开始不要使用是个特别大的学习率学习,可能造成很多神经元失活
3、卷积过程中出现越界情况:
若设置步长为2,则可发现,滑动到下一个位置的时候就已经越界。
一般情况下,用padding补0就行。
一般来说是左右和上下对称补0,所以一般是加上2P。但此处只在右边和下边补0,所以加1P就行了
此处P=1(我猜是因为填充了1列和1行,像之前那样不填充的就是P=0)
(
padding=(F-1)/2 ?
)
池化层
与卷积层比较类似,但是比卷积层简单很多。池化层的目的就是对特征图进行稀疏处理,减少数据运算量。
举例:maxpooling下采样层,2*2大小的池化核。
举例:AveragePooling下采样层
池化层特点:
1 没有训练参数(但卷积层中每个卷积核都有自己的参数),只在原始的特征层上计算
2 只改变特征矩阵的宽度和高度,不改变深度
3 一半池化核大小与步距相同,这样可直接把特征大小成倍缩小,计算更方便。
反向传播中的一些问题
误差的计算
softmax计算过程
计算出来的y1、y2不符合任意一个分布,而我们想让它满足一个概率分布。
所以要对它进行一个softmax处理
损失计算
一般都是使用交叉熵损失
根据最终输出的激活函数来确定使用哪个公式
误差的反向传播
求w112的误差梯度
阿巴阿巴阿巴
时间紧迫我就不记笔记了
所求这个损失梯度的方向是否指向全局最优(损失减小最快)的方向?
随机分成n等份,每批次batch个
优化器
目的:使网络更快地得到收敛。
SGD(随机梯度下降):分批次进行损失的计算、误差的反向传播,梯度方向随机
噪声(有些训练样本标注错误)
解决当前的梯度、把之前的梯度加进来
有效抑制样本噪声的干扰
学习率下降地很快 ,可能模型还没收敛,学习率下降就停止了。
添加的控制学习率衰减速度的系数
g(wt)为损失梯度