一文解释nn、nn.Module与nn.functional的用法与区别

🌈 个人主页:十二月的猫-CSDN博客
🔥 系列专栏: 🏀零基础入门PyTorch框架_十二月的猫的博客-CSDN博客💪🏻 十二月的寒冬阻挡不了春天的脚步,十二点的黑夜遮蔽不住黎明的曙光
目录
1. 前言
2. Torch.nn库
3. nn.Module
4. nn.functional
4.1 基本用法
4.2 常用的functional中的函数
4.2.1 激活函数
4.2.2 损失函数
4.2.3 非线性操作
5. 小例子
6. 总结
1. 前言
- 👑《零基础入门PyTorch》专栏持续更新中,未来最少文章数量为60篇。由于专栏刚刚建立,促销价为9.9。后续将慢慢恢复原价至99.9🍉【在校大学生】评论区留言并私信我免费订阅
- 👑《零基础入门PyTorch》专栏主要针对零基础入门的小伙伴。不需要Python基础,不需要深度学习基础,只要你愿意学,这一个专栏将真正让你做到零基础入门。
- 🔥每例项目都包括理论讲解、数据集、源代码。
正在更新中💹💹
🚨项目运行环境:
- 平台:Window11
- 语言环境:Python3.8
- 运行环境1:PyCharm 2021.3
- 运行环境2:Jupyter Notebook 7.3.2
- 框架:PyTorch 2.5.1(CUDA11.8)
2. Torch.nn库
简单介绍一下nn库中有那些接口:
一、神经网络类
- nn.Module
nn.Module是所有神经网络类的基类。你可以将其视为一个容器,用于管理神经网络中的其他层。创建自定义的网络类时,你需要从nn.Module继承并实现前向传播方法。 - nn.Linear (全连接层)
nn.Linear实现了一个全连接层,用于将输入张量与权重和偏差相加,然后应用激活函数。它需要指定输入特征的数量和输出特征的数量。 - nn.Conv2d (二维卷积层)
nn.Conv2d实现了一个二维卷积层,用于图像处理任务。它可以指定输入通道数、输出通道数、卷积核大小和步长等参数。
二、特殊函数类(模型建构定义中使用)
- nn.MSELoss, nn.CrossEntropyLoss等 (损失函数)
这些类实现了常见的损失函数,如均方误差损失、交叉熵损失等。它们用于计算模型预测与真实值之间的差异。 - nn.ReLU, nn.Tanh, nn.Sigmoid等 (激活函数)
这些类实现了常见的激活函数,如ReLU、Tanh和Sigmoid等。你可以将它们作为层的输出或添加到自定义层中。
三、固定参数函数类(训练循环中快速使用)
- nn.functional (函数)
nn.functional模块包含了许多实用的函数,用于执行常见的神经网络操作,如前向传播、激活函数计算等。这些函数与nn.Module中的类方法相对应,但更加灵活,因为它们不强制使用nn.Module作为容器。
- nn:Module容器、Linear等各种层、不可学习函数、functional容器
- nn.Module容器,里面放置Linear、Conv2d等层。
- nn.functional:函数综合,里面有固定参数的各类函数(损失函数、激活函数等)
- 重点区别:functional容器中的函数 与 不可学习函数
3. nn.Module
nn.Module 类扮演着核心角色,它是构建任何自定义神经网络层、复杂模块或完整神经网络架构的基础构建块。类似于一个网络容器,我们可以往容器中放入各种层结构。
这里,猫猫基于nn.Module创建一个简单的神经网络模型,实现代码如下:
class Net(nn.Module):def __init__(self, input_feature, num_hidden, output_feature):super(Net,self).__init__()self.hidden = nn.Linear(input_feature, num_hidden) #num_hidden隐含层神经元数,也就是输出特征数self.out = nn.Linear(num_hidden,output_feature)def forward(self, x): #net_name(x):自动调用forward函数x = F.relu(self.hidden(x))x = self.out(x) #用激活函数引入非线性成分再经过输出层输出return x
Module:网络容器。定义网络模型、网络功能(前向传播与反向传播)
4. nn.functional
nn.functional 是PyTorch中一个重要的模块,包含了许多用于构建神经网络的函数(损失函数、激活函数等)。类似于一个函数容器,我们可以从容器中拿出各种神经网络构建使用的函数。与 nn.Module 不同(Module中的Linear、Conv2d等层本质也就是函数,只不过可以学习参数),nn.functional 中的函数不具有可学习的参数。
4.1 基本用法
在PyTorch中,你只需将输入数据传递给这些函数,并将它们作为网络功能的一部分(记住是网络功能的一部分,不是网络模型的一部分),就可以使用。
网络分为:网络模型(在init中定义就是各种层结构)、网络功能(forward、backward等功能,就是在forward函数中定义)
这里,猫猫有一个简单的示例,演示如何在一个全连接神经网络中使用ReLU激活函数:
import torch.nn as nn
import torch.nn.functional as Fclass MyModel(nn.Module):def __init__(self):super(MyModel, self).__init__()self.fc1 = nn.Linear(64, 128)self.fc2 = nn.Linear(128, 10)def forward(self, x):x = F.relu(self.fc1(x))x = self.fc2(x)return x
nn.functional的主要优势是它的计算效率和灵活性,因为它允许你以函数的方式直接调用这些操作,而不需要创建额外的层。
4.2 常用的functional中的函数
nn.functional中的函数都是参数不可学习的函数
4.2.1 激活函数
激活函数是神经网络中的关键组件,它们引入非线性成分,使网络能够拟合复杂的数据。以下是一些常见的激活函数:
- ReLU
ReLU是一种简单而有效的激活函数,它将输入值小于零的部分设为零,大于零的部分保持不变。它的数学表达式如下:
output = F.relu(input)
- Sigmoid
Sigmoid函数将输入值映射到0和1之间,常用于二分类问题的输出层。它的数学表达式如下:
output = F.sigmoid(input)
- Tanh(双曲正切)
Tanh函数将输入值映射到-1和1之间,它具有零中心化的特性,通常在循环神经网络中使用。它的数学表达式如下:
output = F.tanh(input)
4.2.2 损失函数
- 交叉熵损失(Cross-Entropy Loss)
交叉熵损失通常用于多分类问题,计算模型的预测分布与真实分布之间的差异。它的数学表达式如下:
loss = F.cross_entropy(input, target)
- 均方误差损失(Mean Squared Error Loss)
均方误差损失通常用于回归问题,度量模型的预测值与真实值之间的平方差。它的数学表达式如下:
loss = F.mse_loss(input, target)
4.2.3 非线性操作
nn.functional 模块还包含了许多非线性操作,如池化、归一化等。
- 最大池化(Max Pooling)
最大池化是一种用于减小特征图尺寸的操作,通常用于卷积神经网络中。它的数学表达式如下:
output = F.max_pool2d(input, kernel_size)
- 批量归一化(Batch Normalization)
批量归一化是一种用于提高训练稳定性和加速收敛的技术。它的数学表达式如下:
output = F.batch_norm(input, mean, std, weight, bias)
5. 小例子
nn.ReLU() 和 F.relu()两种方法都是使用relu激活,只是使用的场景不一样,F.relu()是函数调用,一般使用在foreward函数里。而nn.ReLU()是模块调用,一般在定义网络层的时候使用。
import torch
import torch.nn as nnclass NET1(nn.Module):def __init__(self):super(NET1, self).__init__()self.conv = nn.Conv2d(3, 16, 3, 1, 1) # 卷积层,输入3个通道,输出16个通道,卷积核大小3x3,步长1,填充1self.bn = nn.BatchNorm2d(16) # 批量归一化,处理16个通道self.relu = nn.ReLU() # ReLU激活函数def forward(self, x):out = self.conv(x) # 卷积操作out = self.bn(out) # 批量归一化out = self.relu(out) # ReLU激活函数return outclass NET2(nn.Module):def __init__(self):super(NET2, self).__init__()self.conv = nn.Conv2d(3, 16, 3, 1, 1)self.bn = nn.BatchNorm2d(16)def forward(self, x):x = self.conv(x)x = self.bn(x)out = F.relu(x) # 函数的激活函数return out
6. 总结
如果想要学习更多pyTorch的知识,大家可以点个关注并订阅,持续学习、天天进步
你的点赞就是我更新的动力,如果觉得对你有帮助,辛苦友友点个赞,收个藏呀~~~
【在校大学生评论区留言,然后私信我,免费订阅】

相关文章:
一文解释nn、nn.Module与nn.functional的用法与区别
🌈 个人主页:十二月的猫-CSDN博客 🔥 系列专栏: 🏀零基础入门PyTorch框架_十二月的猫的博客-CSDN博客 💪🏻 十二月的寒冬阻挡不了春天的脚步,十二点的黑夜遮蔽不住黎明的曙光 目录 …...
日志统计(acWing,蓝桥杯)
题目: 1238. 日志统计 题目 提交记录 讨论 题解 视频讲解 小明维护着一个程序员论坛。现在他收集了一份”点赞”日志,日志共有 NN 行。 其中每一行的格式是: ts id 表示在 tsts 时刻编号 idid 的帖子收到一个”赞”。 现在小明想…...
3个DeepSeek隐藏玩法
大家最近是不是都被DeepSeek-R1刷屏了 这款号称“中国版O1”的模型,不仅在数学和编程领域表现出色,中文写作能力也很强。 最重要的是,它在理解提示词方面有了很大突破,只要你能打字,它就能理解你的意思。 不过&…...
部署LLM模型到云端
文章目录 1 ECS 云服务器部署2 函数计算FC3 人工智能平台PAI-EAS4 大模型服务平台百炼压测实验结果显示,由于本地设备算力有限,本地部署的模型服务无法满足低延迟和高并发的需求。针对这类线上业务,可以考虑云端部署。 下面先来看看本地部署和云端部署的特点对比。 由上可…...
Python连接不同数据库的总结
Python连接不同数据库的总结 在数据驱动的现代应用开发中,Python凭借其丰富的库和强大的生态系统,成为连接各种数据库的理想编程语言。本文将深入探讨Python连接不同类型数据库的方法、常用库以及关键注意事项。 一、连接MySQL数据库 MySQL是广泛使用…...
web直播弹幕抓取分析 signature
声明: 本文章中所有内容仅供学习交流使用,不用于其他任何目的,抓包内容、敏感网址、数据接口等均已做脱敏处理,严禁用于商业用途和非法用途,否则由此产生的一切后果均与作者无关! 前言 最近遇到太多难点了卡了很久&am…...
Linux ftrace 内核跟踪入门
文章目录 ftrace介绍开启ftraceftrace使用ftrace跟踪指定内核函数ftrace跟踪指定pid ftrace原理ftrace与stracetrace-cmd 工具KernelShark参考 ftrace介绍 Ftrace is an internal tracer designed to help out developers and designers of systems to find what is going on i…...
1Panel应用推荐:WordPress开源博客软件和内容管理系统
1Panel(github.com/1Panel-dev/1Panel)是一款现代化、开源的Linux服务器运维管理面板,它致力于通过开源的方式,帮助用户简化建站与运维管理流程。为了方便广大用户快捷安装部署相关软件应用,1Panel特别开通应用商店&am…...
【数据结构-C语言】绪论
文章目录 一、前言二、基本概念和术语2.1 数据元素、数据项和数据对象2.2 数据结构2.2.1 逻辑结构2.2.2 存储结构 2.3 时间复杂度 一、前言 数据结构部分是根据严蔚敏老师的《数据结构-C语言版第2版》书中内容整理的。 二、基本概念和术语 2.1 数据元素、数据项和数据对象 …...
java poi Excel 文件导入导出常见错误及解决方案
在使用 Apache POI 进行 Excel 文件的导入导出操作时,可能会遇到各种问题。以下是一些常见的错误及其解决方案: 一、文件格式相关问题 1. 文件格式不兼容 问题描述:尝试使用 HSSFWorkbook 读取 .xlsx 文件,或者使用 XSSFWorkbo…...
深入浅出DeepSeek LLM 以长远主义拓展开源语言模型
深入浅出地讲解DeepSeek LLM 以长远主义拓展开源语言模型 🌟 1. 什么是 DeepSeek LLM? 大家想象一下,你在游戏里要打造一个超级英雄角色,选择最强的装备、技能点和升级策略。那么,DeepSeek LLM 就是 AI 界的“超级英雄…...
【Leetcode 每日一题】59. 螺旋矩阵 II
问题背景 给你一个正整数 n n n,生成一个包含 1 1 1 到 n 2 n ^ 2 n2 所有元素,且元素按顺时针顺序螺旋排列的 n n n \times n nn 正方形矩阵 m a t r i x matrix matrix。 数据约束 1 n 20 1 \times n \times 20 1n20 解题过程 定义方向数组…...
回退 android studio emulator 的版本
前情提要 最近用 frida 需要一个完全跑 arm64 的手机 os,因为雷电实时转义 arm 到 x64 的方案本质上还是 x64,会导致 frida 有 bug。查了一下有帖子说 android studio 自带的模拟器支持直接跑 arm64 的镜像 (Other Images) 直接跑跑不通,调…...
数据资产的管理与价值释放
引言:从 “黑金” 到 “数据” 的文明跃迁 在探讨数字资产的未来之前,我们不妨先回顾一下黄金在人类历史长河中的角色。黄金,这种闪耀着独特光芒的金属,从远古时代起就与人类文明紧密相连。在古埃及,黄金被视为太阳神…...
部署夜景增强模型Learning to See in the Dark以及gradio UI编程方法
前面我们已经把Learning to See in the Dark的paper和原理进行了解读,现在把Learning to See in the Dark(后续简称SID模型)部署看一下效果。 这篇文章选择的部署方式是gradio 本地pytorch直接推理。先看一下效果: 对单个文件进…...
【报错解决】MySQL报错:sql_mode=only_full_group_by
文章目录 报错信息 DataGrip 报错还原Navicat 报错还原 报错原因解决方案 查看当前 sql mode方案一:临时解决方案二:永久解决方案三:使用 any_value() 或 group_concat()方案四:调整实现思路,避开 GROUP BY 使用 我…...
【大数据技术】用户行为日志分析(python+hadoop+mapreduce+yarn+hive)
用户行为日志分析(pythonhadoopmapreduceyarnhive) 搭建完全分布式高可用大数据集群(VMwareCentOSFinalShell) 搭建完全分布式高可用大数据集群(HadoopMapReduceYarn) 本机PyCharm远程连接虚拟机Python …...
[Day 16]螺旋遍历二维数组
今天我们看一下力扣上的这个题目:146.螺旋遍历二维数组 题目描述: 给定一个二维数组 array,请返回「螺旋遍历」该数组的结果。 螺旋遍历:从左上角开始,按照 向右、向下、向左、向上 的顺序 依次 提取元素,…...
大模型的底层逻辑及Transformer架构
一、大模型的底层逻辑 1.数据驱动 大模型依赖海量的数据进行训练,数据的质量和数量直接影响模型的性能。通过大量的数据,模型能够学习到丰富的模式和规律,从而更好地处理各种任务。 2.深度学习架构 大模型基于深度学习技术,通常采用多层神经网络进行特征学习与抽象。其中…...
数据结构-基础
1、概念: 程序 数据结构 算法 2、程序的好坏 可读性,稳定性,扩展性,时间复杂度,空间复杂度。 3、数据结构 是指存储、组织数据的方式,以便高效地进行访问和修改。通过选择适当的数据结构, 能…...
论文解读:交大港大上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架(二)
HoST框架核心实现方法详解 - 论文深度解读(第二部分) 《Learning Humanoid Standing-up Control across Diverse Postures》 系列文章: 论文深度解读 + 算法与代码分析(二) 作者机构: 上海AI Lab, 上海交通大学, 香港大学, 浙江大学, 香港中文大学 论文主题: 人形机器人…...
【机器视觉】单目测距——运动结构恢复
ps:图是随便找的,为了凑个封面 前言 在前面对光流法进行进一步改进,希望将2D光流推广至3D场景流时,发现2D转3D过程中存在尺度歧义问题,需要补全摄像头拍摄图像中缺失的深度信息,否则解空间不收敛…...
vue3 字体颜色设置的多种方式
在Vue 3中设置字体颜色可以通过多种方式实现,这取决于你是想在组件内部直接设置,还是在CSS/SCSS/LESS等样式文件中定义。以下是几种常见的方法: 1. 内联样式 你可以直接在模板中使用style绑定来设置字体颜色。 <template><div :s…...
ESP32 I2S音频总线学习笔记(四): INMP441采集音频并实时播放
简介 前面两期文章我们介绍了I2S的读取和写入,一个是通过INMP441麦克风模块采集音频,一个是通过PCM5102A模块播放音频,那如果我们将两者结合起来,将麦克风采集到的音频通过PCM5102A播放,是不是就可以做一个扩音器了呢…...
高危文件识别的常用算法:原理、应用与企业场景
高危文件识别的常用算法:原理、应用与企业场景 高危文件识别旨在检测可能导致安全威胁的文件,如包含恶意代码、敏感数据或欺诈内容的文档,在企业协同办公环境中(如Teams、Google Workspace)尤为重要。结合大模型技术&…...
数据库分批入库
今天在工作中,遇到一个问题,就是分批查询的时候,由于批次过大导致出现了一些问题,一下是问题描述和解决方案: 示例: // 假设已有数据列表 dataList 和 PreparedStatement pstmt int batchSize 1000; // …...
自然语言处理——Transformer
自然语言处理——Transformer 自注意力机制多头注意力机制Transformer 虽然循环神经网络可以对具有序列特性的数据非常有效,它能挖掘数据中的时序信息以及语义信息,但是它有一个很大的缺陷——很难并行化。 我们可以考虑用CNN来替代RNN,但是…...
大数据学习(132)-HIve数据分析
🍋🍋大数据学习🍋🍋 🔥系列专栏: 👑哲学语录: 用力所能及,改变世界。 💖如果觉得博主的文章还不错的话,请点赞👍收藏⭐️留言Ǵ…...
AI书签管理工具开发全记录(十九):嵌入资源处理
1.前言 📝 在上一篇文章中,我们完成了书签的导入导出功能。本篇文章我们研究如何处理嵌入资源,方便后续将资源打包到一个可执行文件中。 2.embed介绍 🎯 Go 1.16 引入了革命性的 embed 包,彻底改变了静态资源管理的…...
Java线上CPU飙高问题排查全指南
一、引言 在Java应用的线上运行环境中,CPU飙高是一个常见且棘手的性能问题。当系统出现CPU飙高时,通常会导致应用响应缓慢,甚至服务不可用,严重影响用户体验和业务运行。因此,掌握一套科学有效的CPU飙高问题排查方法&…...
