PyTorch 神经网络基础(模型构建,参数构造...)

发布时间:2026/7/24 18:51:57
PyTorch 神经网络基础(模型构建,参数构造...) PyTorch 神经网络基础模型构造层和块MLP 的本质显示定义自定义块需要实现的功能1将输入数据作为其前向传播函数的参数。2通过前向传播函数来生成输出。请注意输出的形状可能与输入的形状不同。3计算其输出关于输入的梯度可通过其反向传播函数进行访问。通常这是自动发生的。4存储和访问前向传播计算所需的参数。5根据需要初始化模型参数。*nn.Module是 PyTorch 提供的神经网络乐高积木基座。所有层Linear、Conv2d、ReLU、所有模型MLP、ResNet、BERT、GPT都继承自它。顺序快*nn.Sequential是一个特殊的 nn.Module它把多个层按顺序串起来数据从第一个层流到最后一个层中间不做任何分支或跳转。为了构建我们自己的简化的MySequential 我们只需要定义两个关键函数1一种将块逐个追加到列表中的函数2一种前向传播函数用于将输入按追加块的顺序传递给块组成的“链条”。_modules是 PyTorch 的子模块登记簿 只有把模块放进这里PyTorch 才知道这是我的孩子才会帮你管理参数、搬 GPU、保存模型。用 OrderedDict 是为了严格保证执行顺序。nn.Sequential 的本质就是按顺序遍历 _modules逐个执行。自定义nn.Module的真正威力在 forward 中执行任意 Python 代码这是 nn.Sequential 完全做不到的。1.设置常数参数2.复用同一层3.Py的控制流PyTorch 模块的嵌套组合*只要输入输出维度匹配任意组合都可以。在.init里面中.net和,linear是并列关系输入X先进行.net再进行.linear参数管理我们的目标是找到使损失函数最小化的模型参数值参数访问weight是权重bias是偏移根据构建相对应的索引访问目标参数指定访问*在上面这个网络中由于我们还没有调用反向传播所以参数的梯度处于初始状态。访问第一个层访问所有层补充的访问方式可以通过print大概了解网络层的模块结构假如说设置一个网络模型Block2里嵌套了四个Block1能够看到分层的结构*因为层是分层嵌套的所以我们也可以像通过嵌套列表索引一样访问它们。 下面我们访问第一个主要的块中、第二个子块的第一层的偏置项参数初始化net.apply(init_normal)作用递归遍历模型中的每个子模块将函数 init_normal 应用到每个模块上。1统一初始化所有Linear层2对某些块应用不同的初始化方法3自定义初始化的实现还有额外的打印信息4直接设置参数顾名思义5共享层共享参数本质就是使用同一个层自定义层一个不带参数的层将该层组合到更复杂的模型中带参数的层需要两个额外的参数in_unitsunits输入和输出维度forward就是计算输入经过加权和偏置的输出*用nn.Parameter包装张量PyTorch 才会把它当参数依旧可以构建模型读写文件1存单个张量在当前目录并读取saveload2存储一个张量列表3存放字典4加载和保存模型参数以一个简单的MLP模型为例将模型的参数存储在一个叫做“mlp.params”的文件中state_dict()返回的是类似于下面的映射还原模型1.克隆原MLP的结构这里的参数都是随机初始化的不能用2.读取文件参数字典填充到相应的位置3.使用eval为什么使用模型需要eval()训练模型需要 train()?根据目的我们的需求不同