大家好,又见面了,我是你们的朋友全栈君。
一维卷积
一维卷积的输入是一个向量和一个卷积核,输出也是一个向量。
通常状况下,输入向量长度远大于卷积核的长度。
输出向量的长度取决于卷积操作的填充方案,等宽卷积的输出向量的和输入的向量长度相等。
卷积核的长度通常是奇数,这是为了对称设计的。
一个例子:
注意相乘的顺序是相反的,这是卷积的定义决定的。
输出长度是7,卷积核长度是3,输出的长度是7-3+1 = 5。
也就是说这里的卷积操作若输入长度是m,卷积核长度是n,则输出长度是m-n+1。
这样的卷积就叫窄卷积。
等宽卷积就是在输入两边各填充(n-1)/2,最终输出长度是m+(n-1)/2*2-n+1 = m。
填充元素可以是0,也可以和边缘一样,也可以是镜像。
如上图例子中的输入向量,
- 填充0后的输入为 012345670
- 重复边缘填充后为:112345677
- 镜像填充后为: 212345676
如下图,等宽卷积以及0填充,输入是1 2 3 4 5 6 7,输出是0 2 4 6 8 10 20
换种风格说一下卷积步长的概念,如下图
卷积步长为2,可以看成是步长为1状况下的输出隔两个取一个,当然这也就是步长的概念。默认情况下步长是1。使用等宽卷积时,步长为2的一维卷积会使得输出长度是输入的一半。
二维卷积
如上图,二维的卷积,假设输入维度是mxm,卷积核大小是nxn,则无填充的输出大小是(m-n+1)x(m-n+1)。这和一维卷积是类似的。有填充的二维卷积如下图,
卷积核的含义
在信号处理中,某些卷积核也被称为滤波器。如用滤波器对数字图像进行处理,获得目标图像。上图中有三个不同的卷积核,具有不同的作用,如锐化,去燥,提取边缘等。卷积神经网络中学习到的参数主要就是这些滤波器(也就是卷积核),在训练开始时,这些卷积核的值可能是0,或者随机数。训练结束时,这些卷积核就称为学习到的特征。
卷积层
如上图,全连接层有35个连接,5*7=35个不同参数。卷积层只有5*3=15个连接,但只有3个参数。因为在图b中,相同颜色的连接权重是相等的。这就称为权重共享。而3<7就包含了局部连接的含义,也就是说上边的神经元不是和下边的每一个神经元都有连接,而是它只与附近的几个连接。
池化层
用几个二维的例子来说明,概念非常简单。如这是2×2最大池化,
这是2×2平均池化
但要注意的是这里默认步长是(2,2),也就是横竖两个方向上的步长都是2。
讲道理的话,2×2最大池化步长是1的结果应该是如下图这样的,但好像不是很常用。
池化层也有填充的概念,道理和卷积差不多。
激活层
激活层不改变特征图的大小。也就是说输入大小是mxm的,则输出也是mxm的。只是输入中每个元素x都变成f(x),f就是激活函数。激活函数是一个一元函数,如sigmoid函数是
或者ReLU函数
优化效果的途径
- 增加网络层数
- 增加神经元个数
- 使用dropout
- 使用不同的优化器 Adam,RMSprop等
- 增加训练轮数
- 批处理大小
- 正则化
参考文献
https://nndl.github.io/ 《神经网络与深度学习》
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/125311.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...