🔍 为何需要神经网络工具箱?

在仅用 AutogradTensor 实现模型时,开发者需手动设置参数梯度(requires_grad=True)、反向传播(backward())及梯度提取,过程繁琐且易出错。nn 工具箱应运而生,其核心模块 nn.Modulenn.functional 大幅简化网络构建流程,是高效开发的关键。


🧩 核心模块一:nn.Module

定位:神经网络层或多层网络的结构化容器。
关键特性:

1. 自动参数管理

  • 继承 nn.Module 的自定义网络(如 class Net(nn.Module))可自动检测学习参数(Parameter),无需手动声明梯度。

2. 预定义层优化

  • 提供全连接层(nn.Linear)、卷积层(nn.Conv2d)、损失层(nn.CrossEntropyLoss)等高性能内置层,均经 cuDNN 深度优化,支持 GPU 加速。

3. 模块化组合

  • 可与 nn.Sequential 无缝结合,实现层间的流水线式堆叠。

⚙️ 核心模块二:nn.functional

定位:提供函数式接口的神经网络操作(无状态,无内置参数)。
典型函数:

  • nn.functional.linear(全连接)
  • nn.functional.conv2d(卷积)
  • nn.functional.cross_entropy(交叉熵损失)

❗ 二者核心差异与选型建议

对比维度nn.Xxx (e.g., nn.Linear)nn.functional.xxx (e.g., F.linear)
使用方式先实例化层对象,再传入输入数据直接调用函数,需手动传入权重/偏置
参数管理✅ 自动管理参数,支持复用❌ 需手动定义并传递参数
状态切换✅ 自动处理训练/测试模式(如 Dropout)❌ 需手动实现模式切换逻辑
与 nn.Sequential 兼容性✅ 直接支持❌ 无法直接组合使用

📌 官方推荐场景:

  1. 优先用 nn.Xxx
    • 所有含可学习参数的层(如卷积、全连接、BatchNorm)。
  2. 可选 nn.functional.xxx
    • 无参数操作(如激活函数 F.relu、池化 F.max_pool2d)或自定义损失函数。

💎 实践总结

1. 结构化网络 → 选择 nn.Module

  • 优势:参数自动追踪、模块化设计、训练/测试切换自动化。

2. 轻量级操作 → 选择 nn.functional

  • 适用:简单变换或需灵活控制参数的场景(如自定义损失函数)。

示例代码片段:

# nn.Module 风格(推荐用于核心层)
class Net(nn.Module):def __init__(self):super().__init__()self.fc = nn.Linear(784, 256)  # 自动管理参数 def forward(self, x):return F.relu(self.fc(x))      # 激活函数用 functional # 训练时自动切换状态 
model.train()   # Dropout/BatchNorm 启用训练模式 
model.eval()    # 切换到测试模式 

🚀 结语

掌握 nn.Modulenn.functional 的分工,是构建高效、可维护PyTorch模型的基础。核心原则:

  • 参数即状态 → nn.Module
  • 纯函数操作 → nn.functional
    合理搭配二者,可大幅提升开发效率与代码可读性!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/diannao/95851.shtml
繁体地址,请注明出处:http://hk.pswp.cn/diannao/95851.shtml
英文地址,请注明出处:http://en.pswp.cn/diannao/95851.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Java注解学习记录

目录 一、为什么要学注解? 二、注解是什么? 三、为什么要使用注解? 四、注解的作用 五、注解的分类 5.1 元注解 Retention(/ rɪˈtenʃ(ə)n /) ★★★★★ Target ★★★★★ Inherited(/ ɪnˈherɪtɪd /…

43.安卓逆向2-补环境-使用unidbg(使用Smali语法调用方法和使用方法地址调用方法)

免责声明:内容仅供学习参考,请合法利用知识,禁止进行违法犯罪活动! 内容参考于:图灵Python学院 工具下载: 链接:https://pan.baidu.com/s/1bb8NhJc9eTuLzQr39lF55Q?pwdzy89 提取码&#xff1…

【Kubernetes知识点问答题】Pod 调度

1. 如何将特定 Pod 调度到指定的节点?可以使用下列方法中的任何一种来选择 K8s 对特定 Pod 的调度:① 与节点标签匹配的 nodeSelector:在 Pod 的规范中使用 nodeSelector 字段来指定节点标签,以便将 Pod 调度到具有特定标签的节点…

wordpress显示时间日期的几种常见的方式

在WordPress中,显示时间日期有多种常见方式,包括使用默认设置、模板标签、插件等,以下是详细介绍: 使用默认设置 WordPress的默认设置允许你在文章列表中显示文章的发布时间。登录到WordPress后台,在“设置”中找到“…

基于飞算JavaAI实现布隆过滤器防止缓存穿透:原理、实践与全流程解析

引言:当缓存失效时,系统如何避免“雪崩式崩溃”? 在互联网高并发场景中(如电商秒杀、社交平台热点新闻),缓存是提升系统性能的核心手段——将频繁访问的数据(如商品详情、用户信息)存…

DeepResearch开源与闭源方案对比

在这个AI不再只是聊天工具的时代,"深度研究"已经成为大语言模型(LLM)的一项新能力。先进的LLM不再只是给出快速的一次性回答,而是可以像研究助手一样工作——搜索网上信息,调用各种工具(比如搜索…

UniApp 页面传参方式详解

在 UniApp 开发中,页面间参数传递是核心功能之一。以下是 8 种常用的传参方式,每种方式都有其适用场景和特点:一、URL 拼接传参(最常用) 适用场景:简单数据传递,如 ID、状态值等基础类型数据 实…

音频分类标注工具

pyqt 分类标注工具:import glob import sys import json import os from PyQt5.QtWidgets import (QApplication, QMainWindow, QTableWidget, QTableWidgetItem,QSplitter, QVBoxLayout, QWidget, QPushButton, QRadioButton,QButtonGroup, QLabel, QHBoxLayout, Q…

云计算-Kubernetes+Istio 实现金丝雀发布:流量管理、熔断、流量镜像、ingreess、污点及pv案例实战

介绍 在微服务架构中,如何安全、高效地实现服务发布与流量管理是保障业务稳定性的核心挑战。金丝雀发布(Canary Release)、灰度发布等策略通过精细化的流量控制,可有效降低新版本上线风险, Istio 作为主流的服务网格(Service Mesh)工具。 此次Istio 在 Kubernetes 集群…

12.web api 3

定时器-间歇函数

ComfyUI进阶:EchoMimic插件全解析,让静态肖像实现音频驱动的精准口型动画

在数字内容创作中,让静态肖像“开口说话”并做出自然表情,是提升交互感与沉浸感的关键。传统动画制作需专业人员逐帧调整口型与表情,成本高且效率低。ComfyUI的EchoMimic插件通过音频驱动技术,实现了“输入音频→自动生成匹配口型…

链式前向星、vector存图

场景设定 想象你是一个社交达人,要记录你和所有朋友的关系(这就是“图”)。每个朋友是一个节点,关系是一条边。你需要快速回答:“我有哪些朋友?”(遍历邻居)。方式1:链式…

YAML 中定义 List 的几种方式

在 YAML 配置文件中定义 List 并在 Spring 应用中注入是非常常见的操作,下面详细介绍具体写法和注入方式。一、YAML 中定义 List 的几种方式1. 缩进式写法(推荐)最常用的方式,通过短横线 - 加空格表示列表项:yaml# app…

C# 反射和特性(自定义特性)

自定义特性 你或许已经注意到了,应用特性的语法和之前见过的其他语法有很大不同。你可能会觉得特 性是一种完全不同的结构类型,其实不是,特性只是一种特殊的类。 有关特性类的一些要点如下。 用户自定义的特性类叫作自定义特性。所有特性类都…

科目二的四个电路

一.K21电动机单连续运转接线(带点动控制)1.电路图2.主线路这可很明了,是一条直线,从上接到下就OK了,然后从热继电器出来,接到SB3按钮的常闭触点上接着往下走一端接到SB2的常闭触点上,接着往下走,走到接触器的线圈上,从L2借一条火线出来,从熔断器的上端接入,另一端接…

【位运算】查询子数组最大异或值|2693

本文涉及知识点 位运算、状态压缩、枚举子集汇总 3277. 查询子数组最大异或值 给你一个由 n 个整数组成的数组 nums,以及一个大小为 q 的二维整数数组 queries,其中 queries[i] [li, ri]。 对于每一个查询,你需要找出 nums[li…ri] 中任…

HTML DOM 方法

HTML DOM 方法 引言 HTML DOM(文档对象模型)是HTML文档的编程接口,它允许开发者通过JavaScript来操作HTML文档中的元素。DOM 方法是DOM编程的核心,它提供了丰富的操作手段来改变网页的结构、样式和行为。本文将详细介绍HTML DOM中…

w嵌入式分享合集68

自己的原文哦~ https://blog.51cto.com/whaosoft/14133002 一、一键开关机电路的设计方案 方案一:电路图 一键开关机电路分析如下: 电路工作流程如下: Key按下瞬间,Q2、Q1导通,7805输入电压在8.9V左右&…

FFmpeg QoS 处理

FFmpeg 中的 QoS (服务质量) 处理主要关注于实时流媒体传输中的时序控制、丢帧策略和网络适应等方面。以下是 FFmpeg 中 QoS 相关的关键机制和配置方法。1. 基本 QoS 机制丢帧策略 (Frame Dropping)cAVDictionary *options NULL; av_dict_set(&options, "framedrop&q…

TexStudio中的Latex,PDFLatex,XeLatex和LuaLatex的区别

多种LaTeX编译器一、多种LaTeX编译器 1.1 PDFLaTeX(1994年) 默认、最常用的引擎。 输入文件通常是 ASCII 或 UTF-8 编码(但中文需要 CJK 宏包或 ctex 宏包支持)。 字体选择受限:只能使用 TeX 自带的字体或者 Type 1…