当前位置: 首页 > 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、数据结构 是指存储、组织数据的方式,以便高效地进行访问和修改。通过选择适当的数据结构, 能…...

打开软件就弹出D3DCompiler_47.dll错误 免费下载修复方法分享

在使用电脑系统时经常会出现丢失找不到某些文件的情况,由于很多常用软件都是采用 Microsoft Visual Studio 编写的,所以这类软件的运行需要依赖微软Visual C运行库,比如像 QQ、迅雷、Adobe 软件等等,如果没有安装VC运行库或者安装…...

Attention Unet vs Unet++:在Camvid数据集上的性能对比实验

Attention Unet与Unet在Camvid数据集上的深度性能评测 语义分割作为计算机视觉领域的核心任务之一,其模型架构的创新从未停止。在众多改进方案中,Attention机制与嵌套跳跃连接(Nested Skip Connection)分别代表了两种不同的优化思…...

告别官方开发板:手把手教你为自制的RK3568板卡移植Linux系统(Ubuntu 18.04环境)

从零构建:自制RK3568开发板的Linux系统深度移植实战 当一块自制的RK3568开发板静静躺在工作台上,没有官方文档支持,没有现成的配置文件,这才是真正考验工程师功底的时刻。不同于使用官方开发板的"开箱即用",…...

从16QAM到256QAM:用Simulink星座图揭秘高阶调制的抗噪性能

高阶QAM调制的星座图分析与Simulink实战指南 在5G和Wi-Fi 6时代,256QAM已成为提升频谱效率的关键技术。但当我们从实验室的理想环境走向真实无线场景时,工程师们常面临一个核心矛盾:如何在频谱效率与系统稳定性之间找到最佳平衡点&#xff1…...

AI视频增强解决方案:Video2X开源工具实战指南

AI视频增强解决方案:Video2X开源工具实战指南 【免费下载链接】video2x A lossless video/GIF/image upscaler achieved with waifu2x, Anime4K, SRMD and RealSR. Started in Hack the Valley II, 2018. 项目地址: https://gitcode.com/GitHub_Trending/vi/video…...

ArduPilot开源飞控之飞行模式切换机制解析

1. ArduPilot飞行模式概述 第一次接触ArduPilot时,最让我震撼的就是它丰富的飞行模式。就像开车时有手动挡、自动挡、运动模式一样,无人机也需要根据不同的飞行场景选择合适的"驾驶模式"。举个例子,新手练习时用Stabilize模式就像开…...

YOLO12与Qt结合:跨平台目标检测应用开发

YOLO12与Qt结合:跨平台目标检测应用开发 1. 引言 想象一下,你开发了一个优秀的目标检测模型,能够在各种场景下准确识别物体。但当你想要把它部署到不同设备上时,却遇到了麻烦:Windows、macOS、Linux各有各的兼容性问…...

避开这3个坑!uni-app直传腾讯云COS的实战避坑指南

uni-app直传腾讯云COS的三大高频问题与增强方案 1. 临时密钥失效的实战解决方案 临时密钥失效是开发者最常遇到的痛点之一。想象一下这样的场景:用户正在上传重要文件,突然提示"密钥已过期",这种体验有多糟糕?我们先来…...

细胞转染优化方向(一):PEI转染效率优化指南【曼博生物】

摘要:PEI转染是AAV、慢病毒及重组蛋白生产中的常用方法。本文从培养基、细胞状态、密度及质粒质量等关键因素出发,系统总结影响PEI转染效率的核心参数及优化思路。 关键词:PEI转染、AAV生产、细胞转染优化、细胞密度、培养基选择、质粒质量一…...

如何快速掌握PathOfBuilding:流放之路终极角色构建规划神器

如何快速掌握PathOfBuilding:流放之路终极角色构建规划神器 【免费下载链接】PathOfBuilding Offline build planner for Path of Exile. 项目地址: https://gitcode.com/GitHub_Trending/pa/PathOfBuilding 还在为《流放之路》复杂的天赋树和装备搭配而头疼…...