文章目录
前言
本文简单介绍了,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