深度学习篇---网络结构

发布于:2025-04-03 ⋅ 阅读:(24) ⋅ 点赞:(0)


前言

本文简单介绍了,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