文章目录
- 前言
- 一、残差块(ResidualBlock)类
- 二、卷积神经网络(CNNModule)类
- 三、具体计算过程
- 3.1第一个卷积模块
- 3.1.1卷积层 self.conv1
- 3.1.2批量归一化层 self.norm1
- 3.1.3激活函数层 self.relu1
- 3.1.4最大池化层 self.pool1
- 3.2第一个残差块和池化层
- 3.2.1残差块 self.res_block1
- 3.2.2平均池化层 self.pool2
- 3.3第二个残差块和池化层
- 3.3.1残差块 self.res_block2
- 3.3.2最大池化层 self.pool3
- 3.4第二个卷积模块
- 3.4.1卷积层 self.conv2
- 3.4.2批量归一化层 self.norm2
- 3.4.3激活函数层 self.relu2
- 3.4.4平均池化层 self.pool4
- 3.5Dropout 层和全局平均池化
- 3.5.1Dropout 层 self.dropout
- 3.5.2全局平均池化 torch.mean(x, dim=2)
- 3.6全连接层
- 3.6.1全连接层 self.fc
- 四、输出结果
前言
本文简单介绍了,Pytorch框架下的一款深度学习网络框架的配置。
一、残差块(ResidualBlock)类
class ResidualBlock(nn.Module):def __init__(self, in_channels, out_channels, stride=1):super(ResidualBlock, self).__init__()self.conv1 = nn.Conv1d(in_channels, out_channels, kernel_size=3, stride=stride, padding=1)self.norm1 = nn.BatchNorm1d(out_channels)self.relu = nn.LeakyReLU()self.conv2 = nn.Conv1d(out_channels, out_channels, kernel_size=3, stride=1, padding=1)self.norm2 = nn.BatchNorm1d(out_channels)self.shortcut = nn.Sequential()if stride != 1 or in_channels != out_channels:self.shortcut = nn.Sequential(nn.Conv1d(in_channels, out_channels, kernel_size=1, stride=stride),nn.BatchNorm1d(out_channels))
__init__ 方法
super(ResidualBlock, self).__init__():调用父类 nn.Module 的构造函数,确保正确初始化。
self.conv1 = nn.Conv1d(in_channels, out_channels, kernel_size=3, stride=stride, padding=1):定义第一个一维卷积层。in_channels 是输入的通道数,out_channels 是输出的通道数,kernel_size=3 表示卷积核的大小为 3,stride 是步长,padding=1 表示在输入的两侧各填充 1 个单位,以保持输出的长度与输入相同(当 stride=1 时)。
self.norm1 = nn.BatchNorm1d(out_channels):定义第一个批量归一化层,用于加速训练和提高模型的稳定性,对 out_channels 个通道进行归一化操作。
self.relu = nn.LeakyReLU():定义一个 LeakyReLU 激活函数,用于引入非线性。
self.conv2 = nn.Conv1d(out_channels, out_channels, kernel_size=3, stride=1, padding=1):定义第二个一维卷积层,输入和输出的通道数相同,卷积核大小为 3,步长为 1,填充为 1。
self.norm2 = nn.BatchNorm1d(out_channels):定义第二个批量归一化层。
self.shortcut = nn.Sequential():初始化一个空的序列模块,用于残差连接。
if stride != 1 or in_channels != out_channels::如果步长不等于 1 或者输入通道数不等于输出通道数,需要对输入进行调整,使其能够与卷积层的输出相加。
self.shortcut = nn.Sequential(nn.Conv1d(in_channels, out_channels, kernel_size=1, stride=stride), nn.BatchNorm1d(out_channels)):定义一个 1x1 卷积层和一个批量归一化层,用于调整输入的通道数和长度。
def forward(self, x):out = self.relu(self.norm1(self.conv1(x)))out = self.norm2(self.conv2(out))out += self.shortcut(x)out = self.relu(out)return out
forward 方法
out = self.relu(self.norm1(self.conv1(x))):输入 x 首先经过第一个卷积层 self