Pytorch Note26 卷积神经网络

Posted Real&Love

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Pytorch Note26 卷积神经网络相关的知识,希望对你有一定的参考价值。

Pytorch Note26 卷积神经网络

全部笔记的汇总贴:Pytorch Note 快乐星球

在卷积神经网络中,有三个观点很重要

局部性

对于一张图片而言,需要检测图片中的特征来决定图片的类别,通常情况下这些特征都不是由整张图片决定的,而是由一些局部的区域决定的:

比如下图中的中的鸟喙,该特征只存在于图片的局部中。

请添加图片描述

相同性

对不同图片,如果它们有同样特征,这些特征出现在图片不同的位置,也就是说可用同样的检测模式去检测不同图片的相同特征,不过这些特征处于图片中不同的位置,但是特征检测所做的操作几儿乎一样

比如鸟喙处不同的位置,可用相同的检測模式去检测。

不变性

一张大图片,进行下采样,图片性质基本不变。

请添加图片描述

这三个性质分别对应着卷积神经网络中的三种思想

卷积层的性质

这里不详细介绍卷积层了,就给出卷积层的总结的一些性质

(1)输入数据体的尺寸是 W 1 × H 1 × D 1 W_1 \\times H_1 \\times D_1 W1×H1×D1

(2)四个超参数:

  • 滤波器数量K
  • 滤波器空间尺寸F
  • 滑动步长S
  • 零填充的数量P

(3)输入数据体的尺寸为$W_2 \\times H_2 \\times D_2 , 其 中 ,其中 W_2=\\frac{W_1-F+2P}{S}+1,H_2=\\frac{H_1-F+2P}{S}+1,D_2=K$

(4)由于参数共享,每个滤波器包含的权重数目为 F × F × D 1 F × F × D_1 F×F×D1,卷积层一共有前面称 F × F × D 1 × K F × F × D_1 \\times K F×F×D1×K 个权重和K个偏置

(5)在输出体数据中,第 d d d个深度切片(空间尺寸是 W 2 × H 2 W_2 \\times H_2 W2×H2),用第 d d d个滤波器和输入数据进行有效卷积运算的结果,再加上第 d d d个偏置

  • 常见的设置是 F = 3 , S = 1 , P = 1 F=3,S=1,P=1 F=3,S=1,P=1,同时这些超参数也有一些约定俗成的惯例和经验,在之后的章节介绍

池化层的性质

详细可以看链接

池化之所以有效,是因为之前介绍的图片特征具有不变性,也就是通过下采样不会丢失图片拥有的特征,由于这种特性,我们可以将图片缩小再进行卷积处理,这样能够大大降低卷积运算的时间。

最常用的池化层形式是尺寸为2x2的窗口,滑动步长为2,对图像进行下采样,将其中75%的激活信息都丢掉,选择其中最大的保留下来,这其实是因为我们希望能够更加激活里面的数值大的特征,去除一些噪声信息。

池化层有一些和卷积层类似的性质。

(1)输人数据体的尺寸是 W 1 × H 1 × D 1 W_1 \\times H_1 \\times D_1 W1×H1×D1

(2)有两个需要设置的超参数,空间大小 F F F和滑动步长 S S S

(3)输出数据体的尺寸是 W 2 × H 2 × D 2 W_2 \\times H_2 \\times D_2 W2×H2×D2,其中 W 2 = W 1 − F S + 1 , H 2 = H 1 − F S + 1 , D 2 = D 1 W_2=\\frac{W_1-F}{S}+1,H_2= \\frac{H_1-F}{S}+1,D_2=D_1 W2=SW1F+1,H2=SH1F+1,D2=D1

(4)对输人进行固定函数的计算,没有参数引人。

(5)池化层中很少引人零填充

在实际中,有两种方式:一种是 F = 3 , S = 2 F=3,S=2 F=3,S=2,这种池化有重叠;另外更常用的一种是 F = 2 , S = 2 F=2,S=2 F=2,S=2,一般来说应该谨慎使用比较大的池化窗口,以免对网络有破坏性。

除了最大值池化之外,还有一些其他的池化函数,比如平均池化,或者L2范数池化。在实际中证明,在卷积层之间引入最大池化的效果是最好的,而平均池化一般放在卷积神经网络的最后一层

全连接层

全连接层和之前介绍的一般的神经网络的结构是一样的,每个神经元与前一层所有的神经元全部连接,而卷积神经网络只和输人数据中的一个局部区域连接,并且输出的神经元每个深度切片共享参数。

一般经过了一系列的卷积层和池化层之后,提取出图片的特征图、比如说特征图的大小是3x3x512,这个时候,将特征图中的所有神经元变成全连接层的样子,直观上也就是将一个3D的立方体重新排列,变成一个全连接层,里面有3x3x512=4608个神经元,再经过几个隐藏层,最后输出结果。

在这个过程中为了防止过拟合会引人Dropout。最近的研究表明,在进人全连接层之前,使用全局平均池化能够有效地降低过拟合。

以上是关于Pytorch Note26 卷积神经网络的主要内容,如果未能解决你的问题,请参考以下文章

Pytorch Note28 Pytorch的卷积模块

Pytorch Note47 Imporving GAN

Pytorch Note43 自动编码器(Autoencoder)

Pytorch Note27 卷积设计的一些经验总结

Pytorch Note29 使用重复元素的深度网络 VGG

PyTorch 中文本输入的卷积神经网络