Pytorch学习--神经网络基本骨架--nn.Module的使用

一、头文件

torch.nn.Module

二、简单示例

python 复制代码
import torch.nn as nn
import torch.nn.functional as F

class Model(nn.Module):
    def __init__(self) -> None:
        super().__init__()
        self.conv1 = nn.Conv2d(1, 20, 5)
        self.conv2 = nn.Conv2d(20, 20, 5)

    def forward(self, x):
        x = F.relu(self.conv1(x))
        return F.relu(self.conv2(x))
  • 类定义与构造函数:
    • class Model(nn.Module): 声明一个名为Model的类,继承自torch.nn.Module。
    • init(self) -> None: 定义了构造函数__init__,用于初始化网络结构。
    • super().init() 调用父类的构造函数,确保nn.Module中的初始化逻辑被正确执行。
    • self.conv1 = nn.Conv2d(1, 20, 5) 创建了第一个卷积层。
    • self.conv2 = nn.Conv2d(20, 20, 5) 创建第二个卷积层
  • 前向传播 forward:
    • def forward(self, x): 定义了前向传播函数,用于定义输入数据如何经过模型的每一层得到最终输出。
    • x = F.relu(self.conv1(x)) 将输入x通过第一个卷积层conv1,然后将结果通过ReLU激活函数。ReLU激活函数用于引入非线性,以增强模型的表达能力。
    • return F.relu(self.conv2(x)) 继续将数据传递给第二个卷积层conv2,并再次应用ReLU激活函数。

三、自己写代码尝试一下

python 复制代码
import torch
from torch import  nn
class Mary(nn.Module):
    def __init__(self):
        super().__init__()
    def forward(self,input):
        output=input+1
        return output
tensor_Yorelee=torch.tensor(10)
Yorelee=Mary()
Yorelee_output=Yorelee(tensor_Yorelee)
print(Yorelee_output)

输出:

python 复制代码
tensor(11)

提示:善于运用debug,可以显示出每一步到了哪里,且变量值是什么

四、__call__和forward的比较

学到这里,我会想之前学到的__call__和forward函数有什么区别呢?

  • model(x) 等价于调用 call 方法,而 call 会调用 forward 并处理一些额外逻辑。
  • 如果只调用 forward,会省略 call 中的附加功能,因此一般建议使用 model(x) 语法,以便自动调用 call 和 forward。
python 复制代码
model = Model()  # 创建模型实例

# 直接调用 `__call__`,实际上是调用了 `forward` 并包含了额外的处理
output = model(x)

# 直接调用 `forward`,不会包含 `__call__` 中的额外处理
output = model.forward(x)

参考视频

相关推荐
武天旭11 小时前
AI安全--AI大模型赋能安全攻防的关键技术
人工智能·安全
荆棘鸟智能11 小时前
河道采砂船识别与轨迹追踪怎么做?检测、跟踪与电子围栏实战思路
人工智能·算法·目标检测
xwz小王子11 小时前
一根光纤上的“触觉触手“:Nature Communications 光纤触觉 微操作 机器人
人工智能·机器人
shxjnpl11 小时前
从 WenetSpeech-Yue 到 SenseVoice:如何通过专项微调提升粤语语音识别效果?
人工智能·语音识别·实时音视频
pt104311 小时前
Cisco设备网络安全系列-17:AI驱动安全应用与量子计算安全影响
网络·人工智能·安全
comyccccc11 小时前
STM32F407VET6核心板的部分电路绘制学习笔记
笔记·stm32·学习
得物技术11 小时前
Jev 实战:为AI工作流引入轻量决策层 x10倍提速|得物技术
python·llm·测试
叼烟扛炮11 小时前
Linux 学习笔记(三十六):并发进阶——读写锁 vs 自旋锁,到底怎么选?
linux·运维·服务器·笔记·学习
reasonsummer11 小时前
【教学类-07-12】20261028大3班破译电话号码html(手机按钮版本)
python·html
美狐美颜SDK开放平台11 小时前
视频美颜SDK如何应对快速转头与大幅度面部动作?
android·人工智能·ios·音视频·直播美颜sdk·视频美颜sdk