贡献者: xzllxls
卷积神经网络(简称卷积网络,Convolutional Neural Networks, CNN)是指那些至少有一层为卷积层的神经网络[1],卷积网络是一类最广泛使用的基本神经网络架构。卷积层(Convolutional Layer)是用卷积运算代替一般矩阵乘法运算的网络层。
卷积神经网络与以往的传统神经网络,比如全连接网络,有很多相似的地方。它们都有数据输入和输出,通常具有中间隐含层。在深度学习中,卷积网络的隐含层数量往往较多。卷积操作主要考虑相邻神经元之间的关系。由于使用卷积操作,卷积网络与全连接网络相比,参数数量大大减少。而此一特性恰好可以适用于图像处理。因为,在图像中,通常距离接近的像素之间具有较强的关系,而距离较远的像素之间可能没有较大的关系。
由于在实际应用中,大多数图像是二维数据,因为二维卷积网络最为常用。二维卷积层有多个超参数。一个二维卷积层的输入为一个矩阵,其宽为 $W_i$、高为 $H_i$、通道数 $C_i$。卷积核个数为 $K$,步长为 $S$。补零的数量为 $P$。经过卷积层的操作之后,输出一个矩阵,该矩阵的规格为:宽 $W_o$、高 $H_o$、通道数 $C_o$。
输入和输出的超参数之间有如下关系:
有些应用场景,所须要处理的数据是三维图像块,此时可以使用三维卷积网络。三维卷积层的超参数如下:输入为一个矩阵,其宽为 $W_i$、高为 $H_i$、深为 $D_i$、通道数 $C_i$。卷积核个数为 $K$,步长为 $S$。补零的数量为 $P$。经过卷积层的操作之后,输出一个矩阵,该矩阵的规格为:宽 $W_o$、高 $H_o$、深为 $D_o$、通道数 $C_o$。
输入和输出的超参数之间有如下关系:
当前流行的深度学习开发框架都有相应的编程接口,能够很方便的构建卷积网络模型。 你如果使用的是 TensorFlow v2.x 版本,可以采用以下函数来建立一个二维卷积层:
tf.nn.convolution(
input,
filters,
strides=None,
padding='VALID',
data_format=None,
dilations=None,
name=None
)
该函数的参数主要是:input 是输入张量,filters 是过滤器(即卷积核)的个数,strides 表示的是步长,padding 表示的是补零方式,data_format 表示的是数据格式,dilations 表示的是升采样和降采样率。其中 data_format 数据格式参数有两个取值:$NHWC$ 和 $NCHW$。$N$ 表示的是批次大小,$H$ 表示的是高度,$W$ 表示的是宽度,$C$ 表示的是通道数。
你如果使用的是 PyTorch,可以采用下面的代码来建立二维卷积层:
torch.nn.Conv2d(in_channels,
out_channels,
kernel_size,
stride=1,
padding=0,
dilation=1,
groups=1,
bias=True,
padding_mode='zeros',
device=None,
dtype=None)
这是一个封装好的二维卷积层类,可以通过新建一个 Conv2d 对象来建立一个 Pytorch 的二维卷积层。该类的主要参数有:in_channels 是输入数据的通道数,out_channels 是输出结果的通道数,kernel_size 是卷积核尺寸,stride 是步幅,padding 是补零数量,dilation 是膨胀方式,groups 是分组数,bias 是偏置,padding_mode 是补零方式,device 是所采用的计算设备,可以是 CPU,也可以是 GPU,dtype 是数据类型。
参考文献: