Skip to content

nn.Module 与模型构建

模型前置知识

神经网络基础

神经网络是一种模仿人类大脑结构的机器学习模型.

通过模拟人脑的学习方式,具有强大的数据拟合和特征学习能力,是深度学习的重要支柱

基本概念
概念 类比 功能 数学表示 常见类型/示例
神经元 生物神经元 信息处理的基本单元 output = activation(∑(weight * input) + bias) -
权重 连接强度 决定输入对输出的影响 w -
偏置 阈值 调整神经元输出 b -
激活函数 开关 引入非线性 **Sigmoid, Tanh, ReLU, LeakyReLU, ELU**等 -
楼层 信息处理的层次 输入层、隐藏层、输出层 -
输入层 接收外界数据,作为神经网络的输入
隐藏层 对输入数据进行复杂的**非线性变换,提取特征**
输出层 输出神经网络的预测结果
网络层 layer

对于 隐藏层的数量 和 各个隐藏层的节点数: 常见策略是逐层减少节点数

通常,我们选择2的若干次幂作为层的宽度。 因为内存在硬件中的分配和寻址方式,这么做往往可以在计算上更高效。

名称 作用 概念
全连接层 nn.Linear 每个神经元与上一层的所有神经元相连。它用于提取特征和进行非线性变换。 它的每一个输入都通过矩阵-向量乘法得到它的每个输出。
激活层 nn.ReLU 引入非线性变换
批归一化层 nn.BatchNorm2d 对每个批次的输入数据进行标准化,减小不同特征的偏差,帮助加速训练并稳定网络。
dropout层 nn.Dropout 随机将一部分神经元的输出设为0
名称 作用
卷基层 nn.Conv2d 通过卷积核对输入数据进行卷积操作,提取局部特征
池化层 nn.MaxPool2d 用于下采样操作,可以减少特征图的尺寸,减少计算量,并防止过拟合。最常见的池化操作是最大池化和平均池化
循环层 nn.RNN 保留历史信息
自注意力层 nn.Transformer 捕捉输入数据中长距离依赖关系

模型 model

一个模型由1个或多个layer 组成.

sequential

Python
from torch import nn

model = nn.Sequential(
    nn.Conv2d(1,20,5),
    nn.ReLU(),
    nn.Conv2d(20,64,5),
    nn.ReLU()
)

自定义复杂逻辑

Python
from torch import nn

class FCNet(nn.Module):
    def __init__(self, input_size, hidden_size, num_classes):
        super(FCNet, self).__init__()
        self.fc1 = nn.Linear(input_size, hidden_size)
        self.relu = nn.ReLU()
        self.fc2 = nn.Linear(hidden_size, num_classes)

    def forward(self, x):
        out = self.fc1(x)
        out = self.relu(out)
        out = self.fc2(out)
        return out

模型参数

Python
# 查看参数
<div markdown="1" style="margin-top: -30px; font-size: 0.75em; opacity: 0.7;">
:material-circle-edit-outline:  598 个字 :fontawesome-solid-code: 31 行代码 :material-clock-time-two-outline: 预计阅读时间 2 分钟
</div>
model.state_dict()

for name, param in model.named_parameters():
    print(name, param.size())

模型参数初始化

Python
nn.init.zeros_
nn.init.constant_
nn.init.normal_