神经网络机基本框架-nn.Module的使用

目录

前言

一、完整代码示例

二、简单分析

1.nn.Module 是什么?

2.forward() 方法:定义前向传播逻辑。

def forward(self, input):    return input + 1

总结


前言

本章演示了如何通过继承torch.nn.Module类创建一个自定义神经网络模块,并定义其前向传播逻辑。构建深度学习网络的基础。

一、完整代码示例

import torch
from torch import nn

# 定义一个名为 yaowen 的自定义网络模块
class yaowen(nn.Module):
    def __init__(self):
        super().__init__() 

    def forward(self, input):
        output = input + 1  # 前向逻辑
        return output

# 实例化模型
yaowen = yaowen()

x = torch.tensor(1.0)

# 执行前向传播
output = yaowen(x)

print(output)

 这里yaowen是我的名字,你可以让他是任何合法的名字。

二、简单分析

1.nn.Module 是什么?

torch.nn.Module 是 PyTorch 中所有神经网络模块的基类。

自定义模型时通常要继承它,并重写

def __init__(self):
        super().__init__()#重写步骤

2.forward() 方法:定义前向传播逻辑。

def forward(self, input):
    return input + 1


总结

学会了继承torch.nn.Module类创建一个自定义神经网络模块,并定义其前向传播逻辑。构建深度学习网络的基础。

### 构建神经网络时继承 `nn.Module` 类的原因 在 PyTorch 中,`nn.Module` 是构建神经网络的核心基础类。所有的自定义层、模块以及完整的神经网络架构都必须继承自该类[^1]。这是因为 `nn.Module` 提供了一套标准化的接口和制,用于管理和操作神经网络的各种组件。 #### 1. 参数管理 `nn.Module` 自动跟踪并管理模型中的可学习参数。当我们在子类中定义诸如 `nn.Linear` 或 `nn.Conv2d` 这样的层时,这些层内部的权重和偏置会被注册到父类 `nn.Module` 的参数集合中。这使得我们可以通过调用 `.parameters()` 方法轻松获取所有需要优化的参数[^3]。 ```python import torch.nn as nn class SimpleNet(nn.Module): def __init__(self): super(SimpleNet, self).__init__() self.fc = nn.Linear(10, 1) net = SimpleNet() for param in net.parameters(): print(param) ``` #### 2. 前向传播的支持 通过继承 `nn.Module` 并实现其 `forward` 方法,我们可以定义数据在网络中的流动方式。一旦实现了 `forward` 函数,PyTorch 就能够自动推导出反向传播所需的梯度计算逻辑(借助 Autograd 系统),从而简化开发流程[^3]。 #### 3. 子模块嵌套能力 `nn.Module` 支持将多个子模块组合成更大的模块树结构。这种特性允许开发者以分层的方式设计复杂的神经网络体系。例如: ```python class SubModule(nn.Module): def __init__(self): super(SubModule, self).__init__() self.linear = nn.Linear(5, 5) def forward(self, x): return torch.relu(self.linear(x)) class ComplexNet(nn.Module): def __init__(self): super(ComplexNet, self).__init__() self.submodule = SubModule() def forward(self, x): return self.submodule(x) ``` 在此例子中,`SubModule` 和 `ComplexNet` 都是从 `nn.Module` 继承而来的,因此它们可以无缝协作形成更高级别的抽象层次[^1]。 #### 4. 训练与评估模式切换 `nn.Module` 实现了 `.train()` 和 `.eval()` 方法,用来控制模型的行为变化(比如 Dropout 层或 BatchNorm 层的工作状态)。这一功能对于确保模型在不同场景下的表现至关重要[^2]。 总结来说,继承 `nn.Module` 不仅提供了统一的操作框架,还极大地增强了代码复用性和灵活性,同时也让深度学习研究更加高效便捷。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值