1.概述
卷积神经网络的参数,由一些可学习的滤波器集合构成的,每个滤波器在空间上都计较小,但是深度和输入数据的深度保持一致。在前向传播中,让每个滤波器都在输入数据的宽度和高度上滑动(卷积),然后计算整个滤波器和输入数据任意一处的内积。当滤波器沿着输入数据的宽度和高度滑动时,会生成一个二维的激活图,激活图上的每个空间位置表示了原图片对于该滤波器的反应。
2. 三种思想
2-1 局部性
对于一张图片,需要检测图片中的特征来决定图片的类别,通常情况下这些特征都不是由整张图片决定的,而是由局部的区域决定。
2-2 相同性
对于不同的图片,如果他们具有相同的特征,这些特征会出现在图片的不同位置,也就是说可以用同样的检测模型去检测不同图片的相同特征,只不过这些特征处于图片中不同的位置,但是特征检测所做的操作几乎一样。
2-3 不变性
对于一张大图片,如果我们进行下采样,图片的性质基本保持不变。
3.全连接网络
由一系列隐藏层构成,每个隐藏层中由若干个神经元构成,其中每个神经元都和前一层的所有神经元相关联,但是每一层中的神经元是相互独立的。
存在的问题:比如在MNIST数据集,图片大小为28*28,那么第一个隐藏层的单个神经元的权重数目是28*28 = 784个(权重矩阵的一行为一个神经元,一行有784列)
4.卷积神经网络:一个滤波器就相当于一个神经元
卷积层:
4.1 局部区域连接:
是一个3D的容量神经元,也就是说神经元是以三个维度来排列的:宽度,高度,深度。
主要的层结构:卷积层,池化层和全连接层,通过堆叠这些层结构形成了一个完整的卷积神经网络结构。卷积神经网络将原始图片转换成最后的类别得分,其中一些层包含参数,一些层没有包含参数,比如卷积层和全连接层有参数,激活层和池化层不含参数,这些参数通过梯度下降法来更新,最后使得模型尽可能正确的识别类别。
与神经元连接的空间大小叫做神经元的感受野。它的大小是滤波器的宽和高。
例如:输入的数据尺寸:32*32*3,感受野(滤波器尺寸):5*5,卷积层中每个神经元会有输入数据中5*5*3区域的权重,一共有75个权重。
4.2 空间排列:
卷积层的输出深度是一个超参数,与使用的滤波器数量一致,每种滤波器所做的就是输入数据中寻找一种特征。比如输入一张原始图片,卷积层输出的深度是20,这说明有20个滤波器对数据进行处理,每种滤波器寻找一种特征进行激活。
4.3 边界填充:保证输入和输出再空间上的尺寸一致。
一般的,当步长S =1,零填充的值为 P = (F-1)/2 (F为滤波器的宽度)
4.4 参数共享
输出数据再深度切片上所有的权重都是用同一个权重向量,那么卷积层在向前传播的过程中,每个深度切片都可以看成是神经元的权重对输入数据体做卷积
卷积核的输出是一副修改后的图像,在深度学习中经常被称作feature map。对每个颜色通道都有一个feature map
池化层
池化层和卷积层一样也有一个空间窗口,通常采用的是取这些窗口的最大值作为输出结果 ,然后不断滑动窗口,对输入的每个深度切片单独处理,减少它的空间尺寸。图片特征具有不变性,也就是通过下采样不会丢失图片拥有的特征,由于这种特性,我们可以将图片缩小再进行卷积处理,这样大大降低卷积运算的时间。
多通道的卷积:
输入通道:
每个输入通道的图片都是用同一个卷积核进行卷积操作,生成与输入通道匹配的feature map,然后再把这几张feature map相同位置的值加起来,生成一张feature map
输出通道:
想要输出几个feature map,就放几个卷积核,就是几个输出通道。
5 Pytorch卷积模块
5.1 nn.Conv2d():
in_channels:输入数据体的深度
out_channels:输出数据体的深度
kernel_size:滤波器(卷积核)的大小,可以用一个数字来表示高和宽相同的卷积核,也可以用不同的数字
stride:滑动的步长
padding:=0表示四周不进行零填充,=1,表示四周进行1个像素点的零填充
dilation 表示卷积对于输入数据体的空间间隔,默认 dilation =1
bias:默认为True,表示使用偏置