全连接层
全连接层(Fully Connected Layer)可以简单地理解为前面章节中提到的神经网络的一个隐藏层,它包含权重向量W和激活函数。
具体来说,对于一张32*32*3的图片(宽和高均为32个像素,有RGB三个通道,可以将其理解为一个32*32*3的矩阵),要通过全连接层,首先要将其拉伸为3072*1的向量作为神经网络隐藏层的输入,然后该向量与权重向量W做点乘操作,再将点乘后的结果作为激活函数(如Sigmoid或tanh)的输入,最终,激活函数输出的结果便是全连接层的最终结果。
说明:
当完成激活(activation)后的结果为一维向量时,通常将该结果称为特征向量(或激活向量);当激活后的结果为二维向量时,通常称为特征层(feature map,有时也称为激活层,activation map)。由于后面要介绍的卷积层也需要经过激活函数,因此卷积操作得到的结果通常被称为“特征层”。
卷积层
(Convolution Layer)与全连接层不同,它保留了输入图像的空间特征,即对于一张32*32*3的图片而言,卷积层的输入就是32*32*3的矩阵,不需要做任何改变。
在卷积层中,我们引入了一个新的概念:卷积核kernel(常简称为卷积,有时也称为滤波器filter)。
卷积的大小可以在实际需要时自定义其长和宽(常见的卷积神经网络中通常将其设置为1*1、3*3、5*5等),其通道个数一般设置为与输入图片通道数量一致。
必要的概念已经介绍完毕,接下来我们讲一下卷积的过程:让卷积(核)在输入图片上依次进行滑动,滑动方向为从左到右,从上到下;每滑动一次,卷积(核)就与其滑窗位置对应的输入图片x做一次点积计算并得到一个数值。 这里需要提到另外一个概念:步长(stride)。
步长是指卷积在输入图片上移动时需要移动的像素数,如步长为1时,卷积每次只移动1个像素,计算过程不会跳过任何一个像素,而步长为2时,卷积每次移动2个像素。
补充说明: 卷积每次滑动覆盖的格子范围在图像处理中被称为“感受野”,这个名词在后文中还会用到。
卷积神经网络是由一系列卷积层经过激活来得到的。
与传统神经网络不同的是,卷积层的计算是含有空间信息的。 PyTorch中的卷积函数代码具体如下: classtorch.nn.Conv2d(in_channels, out_channels, kernel_size, stride=1, padding=0, dilation=1, groups=1, bias=True)
in_channels (int) :输入图片的channel
out_channels (int) :输出图片(特征层)的channel kernel_size (int or tuple) :kernel的大小
stride (int or tuple, optional) :卷积的步长,默认为1
padding (int or tuple, optional) :四周pad的大小,默认为0
dilation (int or tuple, optional) :kernel元素间的距离,默认为1(dilation翻译为扩张,有时候也称为“空洞”,有专门的文章研究dilation convolution)
groups (int, optional) :将原始输入channel划分成的组数,默认为1(初级读者暂时可以不必细究其用处)
bias (bool, optional) :如果是Ture,则输出的bias可学,默认为True
网友评论