卷积神经网络(Convolutional Neural Network,CNN)是深度学习中最常用的一种网络模型,常常用于图像和视频分类任务。在CNN中,卷积层(convolutional layer)是最重要的一个模块,而在卷积层的基础上,通常还会加入批量归一化层(batch normalization layer)和激活层(activation layer)。这三层组合在一起,可以有效地提高模型的性能和训练速度。
conv层
卷积层是CNN中最基本的层之一,主要用于提取图像中的特征。卷积层的输入是一个三维张量,通常表示为(样本数,通道数,高度,宽度)。卷积层的核(kernel)也是一个三维张量,通常表示为(输出通道数,输入通道数,卷积核高度,卷积核宽度)。对于每一个输出通道,卷积层都会使用一个相同的卷积核,该卷积核对输入张量进行卷积操作,生成一个输出张量。卷积层的输出形状取决于卷积核大小、步幅(stride)和填充(padding)等超参数的设置。
以下是一个卷积层的代码示例,该卷积层使用3x3大小的卷积核,步幅为1,填充为1,输入通道数为3,输出通道数为16:
import torch.nn as nn
conv = nn.Conv2d(in_channels=3, out_channels=16, kernel_size=3, stride=1, padding=1)
bn层
批量归一化层是一种用于神经网络中的归一化方法,旨在加速训练过程和提高模型的性能。BN层的输入是一个四维张量,通常表示为(样本数,通道数,高度,宽度)。BN层的输出也是一个四维张量,形状与输入相同。BN层通过对输入张量的每个通道进行归一化操作,抑制了训练过程中的内部协变量偏移问题,从而加速了模型的训练。
以下是一个批量归一化层的代码示例:
bn = nn.BatchNorm2d(num_features=16)
relu层
ReLU激活函数是一种常用的非线性激活函数,可以增强模型的非线性表达能力。ReLU层的输入和输出形状与卷积层和BN层相同。
以下是一个ReLU层的代码示例:
relu = nn.ReLU()
conv+bn+relu组合
将卷积层、BN层和ReLU层组合在一起,可以形成一种常见的网络结构。以下是一个conv+bn+relu组合的代码示例:
import torch.nn as nn
conv_bn_relu = nn.Sequential(
nn.Conv2d(in_channels=3, out_channels=16, kernel_size=3, stride=1, padding=1),
nn.BatchNorm2d(num_features=16),
nn.ReLU()
)
上述代码将卷积层、BN层和ReLU层依次组合在一起,形成了一个三层的卷积神经网络模型,该模型输入为一个(样本数,3,高度,宽度)的四维张量,输出为一个(样本数,16,高度,宽度)的四维张量。