当前位置: 首页 > news >正文

一文解释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库中有那些接口:

一、神经网络类

  1. nn.Module
    nn.Module是所有神经网络类的基类。你可以将其视为一个容器,用于管理神经网络中的其他层。创建自定义的网络类时,你需要从nn.Module继承并实现前向传播方法。
  2. nn.Linear (全连接层)
    nn.Linear实现了一个全连接层,用于将输入张量与权重和偏差相加,然后应用激活函数。它需要指定输入特征的数量和输出特征的数量。
  3. nn.Conv2d (二维卷积层)
    nn.Conv2d实现了一个二维卷积层,用于图像处理任务。它可以指定输入通道数、输出通道数、卷积核大小和步长等参数。

二、特殊函数类(模型建构定义中使用)

  1. nn.MSELoss, nn.CrossEntropyLoss等 (损失函数)
     这些类实现了常见的损失函数,如均方误差损失、交叉熵损失等。它们用于计算模型预测与真实值之间的差异。
  2. nn.ReLU, nn.Tanh, nn.Sigmoid等 (激活函数)
    这些类实现了常见的激活函数,如ReLU、Tanh和Sigmoid等。你可以将它们作为层的输出或添加到自定义层中。

三、固定参数函数类(训练循环中快速使用)

  1. nn.functional (函数)
    nn.functional模块包含了许多实用的函数,用于执行常见的神经网络操作,如前向传播、激活函数计算等。这些函数与nn.Module中的类方法相对应,但更加灵活,因为它们不强制使用nn.Module作为容器。
  • nnModule容器、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,请返回「螺旋遍历」该数组的结果。 螺旋遍历:从左上角开始,按照 向右、向下、向左、向上 的顺序 依次 提取元素&#xff0c…...

大模型的底层逻辑及Transformer架构

一、大模型的底层逻辑 1.数据驱动 大模型依赖海量的数据进行训练,数据的质量和数量直接影响模型的性能。通过大量的数据,模型能够学习到丰富的模式和规律,从而更好地处理各种任务。 2.深度学习架构 大模型基于深度学习技术,通常采用多层神经网络进行特征学习与抽象。其中…...

数据结构-基础

1、概念: 程序 数据结构 算法 2、程序的好坏 可读性,稳定性,扩展性,时间复杂度,空间复杂度。 3、数据结构 是指存储、组织数据的方式,以便高效地进行访问和修改。通过选择适当的数据结构, 能…...

offset三大家族

以下是关于 offset 三大家族的知识点总结: 1. offsetParent 定义:offsetParent 是距离目标元素最近的已定位(position 不为 static)的祖先元素。特点: 如果父级元素都没有定位,则 offsetParent 为 body。…...

[SC]SystemC在CPU/GPU验证中的应用(六)

SystemC在CPU/GPU验证中的应用(六) 摘要:下面分享50个逐步升级SystemC编程能力的示例及建议的学习路线图。您可以一次一批地完成它们——从前五个基础的例子开始,然后转向channels, TLM, bus models, simple CPU/GPU kernels等等。在每个阶段掌握之后,再进行下一组…...

跟单业务并发量分析

虚拟货币交易所中的跟单交易(copy trading)业务在高峰期的确可能产生较高的并发量,但具体并发量取决于多个因素,包括交易所的规模、用户数量、热门交易员的活跃度、行情波动频率等。 📌 1. 跟单交易的并发特点 触发集…...

vue3 + WebSocket + Node 搭建前后端分离项目 开箱即用

[TOC](vue3 WebSocket Node 搭建前后端分离项目) 开箱即用 前言 top1:vue3.5搭建前端H5 top2:Node.js koa搭建后端服务接口 top3:WebSocket 长连接实现用户在线聊天 top4:接口实现模块化 Mysql 自定义 top5:文件上…...

java操作服务器文件(把解析过的文件迁移到历史文件夹地下)

第一步导出依赖 <dependency><groupId>org.apache.sshd</groupId><artifactId>sshd-core</artifactId><version>2.13.0</version></dependency> 第二步写代码 public void moveFile( List<HmAnalysisFiles> hmAnalys…...

信息安全之为什么引入公钥密码

在对称密码中&#xff0c;由于加密和解密的密钥是相同的&#xff0c;因此必须向接收者配送密钥&#xff0c;这里就涉及到密钥配送问题 那么什么时候密钥配送问题呢&#xff1f;举个简单的例子大家就清楚了&#xff0c; Alice 前几天在网上认识了Bob&#xff0c;现在她想给Bob…...

进程同步:生产者-消费者 题目

正确答案&#xff1a; 问题类型&#xff1a; 经典生产者 - 消费者问题 同时涉及同步和互斥。 同步&#xff1a;生产者与消费者通过信号量协调生产 / 消费节奏&#xff08;如缓冲区满时生产者等待&#xff0c;空时消费者等待&#xff09;。互斥&#xff1a;对共享缓冲区的访问需…...

动态表单开发避坑:改变input的值不会触发change事件即时修复策略-WdatePicker ——仙盟创梦IDE

原始传统模式 onchange <input onchange"未来之窗东方仙盟change(this)" oni > <script>function 未来之窗东方仙盟change(onj){console.log("未来之窗东方仙盟change",onj.value)} </script> 测试 原始传统模式 oninput <input …...

移动安全Android——客户端静态安全

一、反编译保护 测试工具 Jadx GitHub - skylot/jadx: Dex to Java decompiler PKID [下载]PKID-APP查壳工具-Android安全-看雪-安全社区|安全招聘|kanxue.com 测试流程 &#xff08;1&#xff09;通过Jadx对客户端APK文件进行反编译&#xff0c;观察是否进行代码混淆 &…...

2.qml使用c++

目录 1.概述2.注册方式3. 分类①枚举类②工具类③数据类④资源类②视图类 1.概述 qml是用来干嘛的&#xff1f; 当然是提高UI开发效率的 为什么要混合C&#xff1f; 因为qml无法处理密集型数据逻辑 而加入c则兼顾了性能 达到11>2 总结就是 qml 开发UI, C 实现逻辑 而js的用…...