神经网络的核心:简单易懂理解 PyTorch 非线性激活函数

目录

torch.nn子函数非线性激活详解

nn.Softmin

Softmin 函数简介

函数工作原理

参数详解

使用技巧与注意事项

示例代码

nn.Softmax

Softmax 函数简介

函数工作原理

参数详解

使用技巧与注意事项

示例代码

nn.Softmax2d

Softmax2d 函数简介

函数工作原理

输入和输出形状

使用技巧与注意事项

示例代码

nn.LogSoftmax

LogSoftmax 函数简介

函数工作原理

参数详解

使用技巧与注意事项

示例代码

nn.AdaptiveLogSoftmaxWithLoss

AdaptiveLogSoftmaxWithLoss 函数简介

函数工作原理

参数和返回类型

使用技巧与注意事项

示例代码

总结


torch.nn子函数非线性激活详解

nn.Softmin

Softmin 函数简介

  • 用途Softmin 函数是一个用于机器学习中的归一化技术。它通常应用于多类别分类问题中,用于将输入张量(Tensor)转换成概率分布形式。这个分布的特点是数值范围在 [0, 1] 之间,并且所有元素之和为 1。

函数工作原理

  • 定义Softmin 通过对每个元素应用指数函数,然后进行归一化,来创建一个与原始张量相同形状的输出张量。归一化是通过将每个元素的指数与所有元素的指数之和进行除法来实现的。
  • 数学表达式:给定一个元素x_{i}_{}Softmin(x_i) 计算为\frac{exp(-x_{i})}{\sum_{j}exp(-x_{j})}

参数详解

  • dim 参数:这是一个整数,用于指定应用 Softmin 的维度。此参数确保在指定维度上的所有切片(slice)的和为 1。

使用技巧与注意事项

  • 选择合适的维度:选择 dim 参数时要仔细考虑,这取决于你的数据结构和你想要的输出。例如,在处理二维数据时,如果你希望每行的输出之和为 1,则 dim 应该设置为 1。
  • 输入数据:确保输入数据适合 Softmin 处理。由于 Softmin 是指数运算,所以对于具有非常大或非常小值的输入数据,可能会产生数值不稳定的问题。

示例代码

下面是一个使用 Softmin 的示例代码:

import torch
import torch.nn as nn# 初始化 Softmin 层
m = nn.Softmin(dim=1)# 创建一个随机输入张量
input_tensor = torch.randn(2, 3)# 应用 Softmin
output = m(input_tensor)print("Input Tensor:", input_tensor)
print("Softmin Output:", output)

这段代码首先导入了必要的 PyTorch 组件,然后创建了一个 Softmin 层,指定了操作的维度。之后,它创建了一个随机的输入张量,并应用 Softmin,最后打印了输入和输出张量。

nn.Softmax

Softmax 函数简介

  • 用途Softmax 是神经网络中常用的激活函数,主要用于多类别分类问题。它将一个 n 维输入张量转换成一个概率分布,其中每个元素的值都在 [0,1] 范围内,且所有元素的和为 1。

函数工作原理

  • 定义Softmax 将每个元素的自然指数(exp)与所有元素自然指数之和的比值作为输出。对于输入张量中的每个元素x_{i}Softmax(x_i) 计算为\frac{exp(x_{i})}{\sum_{j}exp(x_{j})}
  • 稀疏张量:当输入张量是稀疏的时候,未指定的值被视为负无穷(-inf)。

参数详解

  • dim 参数:这是一个整数,用于指定 Softmax 应用的维度。在这个维度上的每个切片(slice)将会被转换成概率分布,其和为 1。

使用技巧与注意事项

  • 选择维度:在使用 Softmax 时,正确选择 dim 参数非常重要。它取决于您的数据结构和期望的输出方式。例如,在处理二维数据(比如批量数据)时,通常将 dim 设置为 1,这样每行的输出之和为 1。
  • 与 NLLLoss 的兼容性:请注意,Softmax 不直接与 NLLLoss(负对数似然损失)一起使用。如果您需要将这两者结合使用,请使用 LogSoftmax,因为它计算速度更快,且数值属性更佳。

示例代码

下面是一个 Softmax 的使用示例:

import torch
import torch.nn as nn# 创建 Softmax 层
m = nn.Softmax(dim=1)# 创建输入张量
input_tensor = torch.randn(2, 3)# 应用 Softmax
output = m(input_tensor)print("Input Tensor:", input_tensor)
print("Softmax Output:", output)

此代码首先导入了必要的 PyTorch 库,然后创建了一个 Softmax 层,并指定了操作的维度。接着,它生成了一个随机的输入张量,并应用了 Softmax。最后,它打印出输入张量和经过 Softmax 处理后的输出张量。

nn.Softmax2d

Softmax2d 函数简介

  • 用途Softmax2d 主要用于对图像数据进行操作,适用于处理多通道图像数据。在图像处理的上下文中,它可以用于分类每个像素点所属的类别。

函数工作原理

  • 定义Softmax2d 对每个空间位置(即图像的每个像素点)上的特征应用 Softmax 函数。对于具有通道(C)、高度(H)和宽度(W)的图像,它会在每个位置 (C, h_i, w_j) 应用 Softmax

输入和输出形状

  • 输入形状:可接受两种形状的输入 - (N, C, H, W) 和 (C, H, W),其中 N 是批量大小,C 是通道数,H 是高度,W 是宽度。
  • 输出形状:输出张量与输入张量具有相同的维度和形状,值在 [0, 1] 范围内。

使用技巧与注意事项

  • 通道维度上的 SoftmaxSoftmax2d 是在通道维度(C)上进行操作的,这意味着对于每个像素位置,通道维度上的值将被转换成概率分布。
  • 图像处理中的应用:在进行图像分割或像素级分类时,Softmax2d 尤其有用,因为它允许模型为每个像素位置分配概率。

示例代码

下面是一个使用 Softmax2d 的示例:

import torch
import torch.nn as nn# 创建 Softmax2d 层
m = nn.Softmax2d()# 创建一个随机的图像张量,格式为 [批量大小, 通道数, 高度, 宽度]
input_tensor = torch.randn(2, 3, 12, 13)# 应用 Softmax2d
output = m(input_tensor)print("Input Tensor Shape:", input_tensor.shape)
print("Softmax2d Output Shape:", output.shape)

 这段代码展示了如何初始化 Softmax2d 层,并对一个随机生成的图像张量应用该层。输入和输出张量的形状是相同的,保证了每个像素位置的通道值被转换成概率分布。

nn.LogSoftmax

LogSoftmax 函数简介

  • 用途LogSoftmax 是在神经网络中常用的激活函数,特别是在多类别分类问题中。它是 Softmax 函数的对数版本,常用于提高数值稳定性并与某些类型的损失函数(如负对数似然损失)一起使用。

函数工作原理

  • 定义LogSoftmax 实质上是 Softmax 后应用自然对数。对于输入张量中的每个元素 x_{j}LogSoftmax(x_i) 计算为log(\frac{exp(x_{i})}{\sum_{j}^{exp(x_{j})}})
  • 输出范围:输出的值范围是 [−∞,0),这是因为对数函数的输出范围。

参数详解

  • dim 参数:这是一个整数,用于指定计算 LogSoftmax 的维度。在这个维度上的每个切片(slice)将会被转换成对数概率分布。

使用技巧与注意事项

  • 配合损失函数使用LogSoftmax 通常与负对数似然损失(NLLLoss)结合使用,在计算多类别分类问题的损失时尤其有效。
  • 数值稳定性:由于直接对 Softmax 的结果取对数可能导致数值不稳定,因此 LogSoftmax 提供了一种更稳定的计算方法。

示例代码

下面是一个 LogSoftmax 的使用示例:

import torch
import torch.nn as nn# 创建 LogSoftmax 层
m = nn.LogSoftmax(dim=1)# 创建输入张量
input_tensor = torch.randn(2, 3)# 应用 LogSoftmax
output = m(input_tensor)print("Input Tensor:", input_tensor)
print("LogSoftmax Output:", output)

这段代码首先导入了必要的 PyTorch 组件,然后创建了一个 LogSoftmax 层,并指定了操作的维度。接着,它创建了一个随机的输入张量,并应用了 LogSoftmax。最后,它打印出输入张量和经过 LogSoftmax 处理后的输出张量。

nn.AdaptiveLogSoftmaxWithLoss

AdaptiveLogSoftmaxWithLoss 函数简介

  • 用途:这个函数是为了高效地处理具有大量输出类别的模型,特别适用于标签分布高度不平衡的情况,如自然语言处理中的单词频率分布。

函数工作原理

  • 高效的 softmax 近似:它通过将标签分配到不同的簇(clusters)来实现高效计算。每个簇可能包含不同数量的目标,频率较低的标签被分配较低维的嵌入,从而加速计算。
  • 自适应性:根据每个 minibatch 中出现的目标,仅计算相关簇。这意味着常访问的簇(如包含频繁标签的簇)的计算成本较低。

参数和返回类型

  • 参数
    • in_features(int):输入张量中的特征数。
    • n_classes(int):数据集中的类别数。
    • cutoffs(Sequence):用于将目标分配到它们的桶中的截断值。
    • div_value(float, 可选):用作指数来计算簇的大小,默认值为 4.0。
    • head_bias(bool, 可选):如果设为 True,在自适应 softmax 的头部添加偏差项,默认为 False。
  • 返回类型:返回一个命名元组,包含输出和损失字段。

使用技巧与注意事项

  • 标签排序:传入此模块的标签应根据其频率进行排序。最频繁的标签应该用索引 0 表示,最不频繁的标签用索引 n_classes - 1 表示。
  • 选择适当的截断值:合理设置 cutoffs 对于实现高效计算至关重要。

示例代码

这里是一个使用 AdaptiveLogSoftmaxWithLoss 的示例:

import torch
import torch.nn as nn# 参数设置
in_features = 10
n_classes = 1000
cutoffs = [10, 100, 1000]# 创建 AdaptiveLogSoftmaxWithLoss 层
m = nn.AdaptiveLogSoftmaxWithLoss(in_features, n_classes, cutoffs)# 创建输入和目标张量
input_tensor = torch.randn(2, in_features)
targets = torch.randint(0, n_classes, (2,))# 应用 AdaptiveLogSoftmaxWithLoss
output = m(input_tensor, targets)print("Output:", output)

 在这个示例中,首先导入了必要的 PyTorch 库,并设置了输入特征数、类别数和截断值。然后创建了 AdaptiveLogSoftmaxWithLoss 层,并生成了输入张量和目标张量。接下来应用这个层,并打印输出结果。

总结

在这篇博客中,我们深入探讨了 PyTorch 中几种关键的非线性激活函数及其在神经网络中的应用。从基本的 SoftminSoftmax 到更高级的 Softmax2dLogSoftmax,我们了解了它们的工作原理、使用场景以及编码示例。我们还讨论了 AdaptiveLogSoftmaxWithLoss,一种为处理大型输出空间而设计的高效激活函数。每个函数都配备了详细的参数解释、使用技巧和注意事项,旨在为读者提供全面的理解。无论是图像处理、文本分类还是复杂的自然语言处理任务,这些函数都是构建高效、稳定的神经网络模型的重要工具。

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

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

相关文章

2024最新前端源码分享(附效果图及在线演示)

分享10款非常有趣的前端特效源码 其中包含css动画特效、js原生特效、svg特效以及小游戏等 下面我会给出特效样式图或演示效果图 但你也可以点击在线预览查看源码的最终展示效果及下载源码资源 粒子文字动画特效 基于canvas实现的粒子文字动画特效 会来回切换设定的文字特效 图…

在版权付费方面,OpenAI 比人想象中的还要「小气」

随着新闻出版商与AI公司达成“使用新闻训练AI模型”的协议,像 OpenAI 等科技企业愿意为受版权保护的信息支付的价格逐渐浮出水面。 据 The Information 报道,OpenAI 每年愿意向出版商提供 100万到500万美元来支付受版权保护的新闻文章训练其AI模型。 但…

【leetcode】力扣热门之合并两个有序列表【简单难度】

题目描述 将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。 用例 输入:l1 [1,2,4], l2 [1,3,4] 输出:[1,1,2,3,4,4] 输入:l1 [], l2 [] 输出:[] 输入:l1 []…

王中阳Go赠书活动第一期:《TVM编译器原理与实践》

文章目录 前言TVM编译器的实现过程关于《TVM编译器原理与实践》编辑推荐内容简介作者简介图书目录书中前言/序言《TVM编译器原理与实践》全书速览入手《TVM编译器原理与实践》传送门:结束语参加抽奖 前言 随着人工智能的发展,计算机视觉、自然语言处理和…

MySQL复习汇总(图书管理系统)

MySQL图书管理系统(49-94)源码_71.备份book数据库到e盘的mybook.sql文件(备份文件中要求包含建库命令)-CSDN博客 CROSS JOIN:交叉连接(笛卡尔积) -- 1、 创建一个名称为book的数据库。 -- 2、 打开book数据库…

Vue2-组件的基本应用

个人练习,仅供参考。 1.先在components中创建公用的内容(public.vue)。components文件夹下放组件供其他页面调用。 2.在用到组件的页面导入该公用组件(import navTitle from "/components/public.vue";)。 …

linux账户文件/etc/passwd详解

linux 账户文件/etc/passwd Linux 的/etc/passwd 文件是系统中最重要的文件之一,它存储了系统中所有用户的基本信息,包括用户名、密码、用户 ID、组 ID、主目录、登录 shell。 /etc/passwd 文件中的每行记录对应一个用户 每条记录的格式如下&#xff1a…

论文阅读记录SuMa SuMa++

首先是关于SuMa的阅读,SuMa是一个完整的激光SLAM框架,核心在于“基于面元(surfel)”的过程,利用3d点云转换出来的深度图和法向量图来作为输入进行SLAM的过程,此外还改进了后端回环检测的过程,利用提出的面元的概念和使…

qt-C++笔记之QProcess

qt-C笔记之QProcess code review! 文章目录 qt-C笔记之QProcess一.示例:QProcess来执行系统命令ls -l命令并打印出结果说明 二.示例:QProcess来执行系统命令ls -l命令并打印出结果,代码进一步丰富三.示例:使用 QProcess 在 Qt 中…

深入浅出理解Dilated Convolution(空洞卷积,膨胀卷积)

温故而知新,可以为师矣! 一、参考资料 github仓库:Multi-Scale Context Aggregation by Dilated Convolutions 图片素材来源:Convolution arithmetic 理解Dilation convolution Dilated Convolution —— 空洞卷积(膨…

汪林望教授将于每周三以互动问答直播形式教您如何用龙讯旷腾计算软件PWmat计算不同材料性质

打开VX→搜索“汪林望计算讲座”,关注汪老师的频道,每周三下午16:00我们准时直播! 大家提前准备好问题,可直接提问讨论,当面请教 汪林望教授 中科院半导体所首席科学家 北京龙讯旷腾科技有限公司创始人 美国劳伦斯…

竹云董事长董宁受邀出席2023粤港澳大湾区创新战略学术研讨暨数字科技发展报告会议

科技与创新共舞,数字与产业交融。12月28日,2023 年粤港澳大湾区创新战略学术研讨暨数字科技发展报告会议在深商报告厅举行,深圳市科学技术协会党组成员、驻会副主席石兴中,深圳市商业联合会副会长、深商总会秘书长石庆&#xff0c…

React Native集成到现有原生应用

本篇文章以MacOS环境开发iOS平台为例,记录一下在原生APP基础上集成React Native React Native中文网 详细介绍了搭建环境和集成RN的步骤。 环境搭建 必须安装的依赖有:Node、Watchman、Xcode 和 CocoaPods。 安装Homebrew Homebrew是一款Mac OS平台下…

电商API接口|电商平台使用的物流API的安全风险

电子商务平台的物流 API 如果出现安全漏洞,则消费者的个人信息会被大量暴露。 物流 API 整合了企业和第三方供应商之间的数据和服务,以解决各种市场需求。如果 电商API 接口集成不当,可能会出现泄露个人身份信息 (PII) 的风险。许多使用 API…

京东商品详情API接口(item_get-获得JD商品详情)电商领域的重要角色

电商API接口在电商领域中扮演着重要的角色,它们为电商平台提供了许多功能和便利。以下是电商API接口的一些主要用途: 商品信息查询:通过API接口,第三方开发者或商家可以查询电商平台上的商品信息,包括商品详情、价格、…

Spark六:Spark 底层执行原理SparkContext、DAG、TaskScheduler

Spark底层执行原理 学习Spark运行流程 学习链接:https://mp.weixin.qq.com/s/caCk3mM5iXy0FaXCLkDwYQ 一、Spark运行流程 流程: SparkContext想西苑管理器注册并向资源管理器申请运行Executor资源管理器分配Executor,然后资源管理器启动Ex…

系列十四、理解MySQL varchar(50)

一、理解MySQL varchar(50) 1.1、概述 日常开发中,数据库建表是必不可少的一个环节,建表的时候通常会看到设定某个字段的长度为varchar(50),例如如下建表语句: 那么怎么理解varchar(50)?这个分情况的,MySQ…

静态路由、代理ARP

目录 静态路由静态路由指明下一跳和指明端口的区别代理ARP 我们知道,跨网络通信需要路由 路由有三种类型: 1.直连路由。 自动产生的路由,当网络设备连接到同一网络时,他们可以自动学习到对方的存在。自动学习相邻网络设备的直连信…

用通俗易懂的方式讲解:使用 Mistral-7B 和 Langchain 搭建基于PDF文件的聊天机器人

在本文中,使用LangChain、HuggingFaceEmbeddings和HuggingFace的Mistral-7B LLM创建一个简单的Python程序,可以从任何pdf文件中回答问题。 一、LangChain简介 LangChain是一个在语言模型之上开发上下文感知应用程序的框架。LangChain使用带prompt和few…

盛元广通实验室业务流审批管理系统2.0

系统通过对取样、分析、数据处理、检验报告等分析全过程中多种影响因素的有效管理,强化检验质量,获得准确可靠的分析成果。业务流审批管理系统主要包括了检测管理、业务受理、样品管理、资源质量管理、分包管理、报告生成、统计分析等,系统能…