卷积
设输入图片大小为n*n,卷积核大小为f*f,周围填充p圈,步长为s,则输出图片大小为
(如果计算结果不是整数,则向下取整)
图像边缘检测
将图片与如下卷积核kernal/过滤器filter进行卷积
1 | 0 | -1 |
1 | 0 | -1 |
1 | 0 | -1 |
也可以用下面的这些卷积核进行卷积:
1 | 0 | -1 |
2 | 0 | -2 |
1 | 0 | -1 |
这种卷积核的优点是增加了中间这一行的权重,这样就可以使得整个系统的鲁棒性(robust a.)更高(鲁棒性指的是计算机软件在输入错误、磁盘故障、网络过载或有意攻击情况下,能否不死机、不崩溃)
如果需要进行水平边缘处理,那直接将整个卷积核顺时针旋转90°即可
当然,最好的办法是直接把卷积核设置成参数,让深度学习自己去算,这样就可以更加灵活地处理不同角度的边缘。
填充padding
填充的原因:
1. 卷积的时候边缘的数据只会被计算一两次,这样就浪费了边缘上的信息,因此需要在图片周围进行一定的填充,这样卷积的时候才能够更多地利用到图片边缘的信息
2. 图片每卷积一次缩小(shrink v.)一圈,这样就会使得图片越来越小,在图片周围进行填充可以让图片进行卷积之后仍然保持原来的大小
需要维持图片原大小的p=(f-1)/2
Valid/Same Convolution
Valid Convolution: p=0
Same Convolution: p=(f-1)/2
卷积核边长一般都是奇数
1. 如果f是偶数那就只能够不对称填充(asymmetric padding n.)输入图片,f是奇数才能够对称填充(natural padding n.)
2. 奇数f可以有一个中心点,这样就可以利用中心点来确定卷积核的位置
3. 其实是大家的习惯(
步长stride
多维卷积
直接把每次对应的27个数字加在一起,最后输出只有一个通道
卷积总结
如果是卷积当中的一层,那么
为卷积核的边长,
为填充宽度,
为步长,
为卷积核数量
输入为(分别表示长、宽、通道数量)
输出为(分别表示长、宽、卷积核数量)
每个卷积核为
激活值=(输出+偏差)*激活函数
(
表示样本数量)
权重weights:
偏差常数bias
卷积神经网络的三种层
卷积层Convolution layer(Conv)
池化层Pooling layer(Pool)
全连接层Fully connected layer(FC)
池化层Pooling Layer
f: 过滤器大小
s: 步长
最大池化/平均池化
输入为