神经网络的核心:帮助新手理解 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.rhkb.cn/news/230398.html

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

相关文章

Python 自学(四) 之元组字典与集合

目录 1. 列表,元组,字典与集合的区别 2. 元组的创建和删除 tuple() del P101 3. 单个元素的元组 P102 4. 元组元素的修改 P106 5. 元组的使用场景 6. 字典的创建和删除 dict() zip() : del clear() P1…

金融中IC和IR的定义

当谈到金融领域时,IC(Information Coefficient)和IR(Information Ratio)通常是用来评估投资组合管理绩效的指标。它们都涉及到投资者对信息的利用和管理的效果。 信息系数(IC - Information Coefficient&a…

Spring高手之路-Spring中Bean的五大作用域

目录 Singleton(单例):默认的作用域 Prototype(原型) Request(请求) Session(会话) Global Session(全局会话) 五大作用域范围对比 作用域…

计算机毕业设计——SpringBoot 招投标 任务发布网站(附源码)

1,绪论 在市场范围内,任务发布网站很受欢迎,有很多开发者以及其他领域的牛人,更倾向于选择工作时间、工作场景更自由的零工市场寻求零散单子来补贴家用。 如今市场上,任务发布网站鱼龙混杂,用户需要找一个…

获取CNN/DM适用于评估Bart的格式的数据集(类似于test.source、test.source.tokenized)

项目场景: 复现文本摘要任务评估CNN/DM数据集 问题描述 abisee老哥的代码获取的是bin格式的数据集 时间久远,一些依赖的配置版本难以复现 笔者需要能评估Bart 格式的数据集 形式类似于test.source、test.source.tokenized 解决方案: 经过坚…

霹雳吧啦Wz《pytorch图像分类》-p5ResNet网络

《pytorch图像分类》p5ResNet网络结构 1 网络中的亮点1.1 超深的网络结构1.2 residual模块1.3 Batch Normalization1.4 迁移学习简介 2 模块类代码2.1 BasicBlock(18 & 32 layers)2.2 Bottleneck(50 & 101 & 152 layers&#xff…

vue-cli创建项目时由esLint校验导致报错或警告的问题及解决

vue-cli创建项目时由esLint校验导致报错或警告的问题及解决 一、万能办法 一、万能办法 //就是在报错的JS文件中第一行写上 /* eslint-disable */链接: https://www.yii666.com/blog/288808.html 其它的方法我遇见了再补充

docker的安装的详细教程,以及出现错的解决办法(阿里云)

docker的安装与使用 1.安装dnf sudo yum -y install dnf Repository extras is listed more than once in the configuration 错误:无法为仓库 appstream 找到一个有效的 baseurl 出现这个错误这是由于阿里云的版本导致的 在阿里云开发者社区有答案&#xff01…

什么是软件安全性测试?如何进行安全测试?

一、什么是软件安全性测试? 软件安全性测试是指对软件系统中的安全漏洞进行检测和评估的过程。其目的是为了确保软件系统在面对各种安全威胁时能够保持其功能的完整性、可用性和机密性。 二、软件安全性测试可以通过以下几个步骤来进行: 1. 需求分析&a…

Django 学习教程- Hello world入门案例

系列 Django 学习教程-介绍与安装-CSDN博客 欢迎来到第Djagno学习教程第二章Hello World 入门案例。 在本教程中,我将引导您完成django的Hello World入门案例。 让我们开始吧! 版本 Django 5.0Python 3.10 创建项目 安装 Django 之后&#xff0…

数字孪生与物联网(IoT)技术的结合

数字孪生与物联网(IoT)技术的结合可以在多个领域实现更智能、更高效的应用。以下是数字孪生在物联网技术中的一些应用,希望对大家有所帮助。北京木奇移动技术有限公司,专业的软件外包开发公司,欢迎交流合作。 1.实时监…

把苹果手机上的备忘录转为长图片,分享给别人方法教程

在这个信息爆炸的时代,手机备忘录几乎成了我随身携带的“记忆宝库”。每当我脑海中闪现出一个想法、灵感或是需要记住的重要事项,我都会第一时间打开苹果手机的备忘录,将它们一一记录下来。备忘录的简洁界面和高效操作总能让我在忙碌的生活中…

gradle --腾讯国内镜像源

distributionUrlhttps\://mirrors.cloud.tencent.com/gradle/gradle-7.3.3-bin.zip 1.进入到自己工程目录下的wrapper文件夹。 2.编辑gradle-wrapper文件 使用https://mirrors.cloud.tencent.com/gradle/gradle-4.6-all.zip来代替原来的 https\://services.gradle.org/distri…

CDD文件的制作

CDD文件 1、核查诊断调查表2、制作CDD3、Diva测试 1、核查诊断调查表 ECU级别:包括文档相关、控制器的诊断ID和时间参数,支持的服务,DTC、DID、刷写流程。 2、制作CDD 2.1、cddt编辑思路(每一步都要根据调查表进行操作&#xf…

QT C++调用python传递RGB图像和三维数组,并接受python返回值(图像)

目的: 用QT调用python代码,将QT读取的图像(Qimage)作为参数传入python中,将QT的三维数组作为参数传递给python,python接收QT传入的图像进行计算,将结果返回给QT并显示。 一 .pro 头文件的配置,和lib库的…

很实用的ChatGPT网站—在线编程模块增补篇

很实用的ChatGPT网站(http://chat-zh.com/)——增补篇 今天介绍一个好兄弟开发的ChatGPT网站,网址[http://chat-zh.com/]。这个网站功能模块很多,包含生活、学习、医疗、法律、经济等很多方面。今天跟大家分享一下,新…

Vue:Vue与VueComponent的关系图

1.一个重要的内置关系&#xff1a;VueComponent.prototype.proto Vue.prototype 2.为什么要有这个关系&#xff1a;让组件实例对象&#xff08;vc&#xff09;可以访问到 Vue原型上的属性、方法。 案例证明&#xff1a; <!DOCTYPE html> <html lang"en"&…

errors包返回堆栈信息的性能测试

errors包返回堆栈信息的性能测试 上一篇Golang中使用errors返回调用堆栈信息 讲了使用第三方开源库的errors github.com/go-errors/errors&#xff0c;错误信息带调用栈&#xff0c;方便定位错误的抛出位置。 通过堆栈的信息来定位是方便了&#xff0c;性能怎么样&#xff0c…

【计算机算法设计与分析】n皇后问题(C++_回溯法)

文章目录 题目描述测试样例算法原理算法实现参考资料 题目描述 在nxn格的棋盘上放置彼此不受攻击的n格皇后。按照国际象棋的规则&#xff0c;皇后可以攻击与之处在同一行或同一列或同一斜线上的棋子。n后问题等价于在nxn格的棋盘上放置n个皇后&#xff0c;任何2个皇后不放在同…

智能分析网关V4智慧港口码头可视化视频智能监管方案

一、需求背景 近年来&#xff0c;水利港口码头正在进行智能化建设&#xff0c;现场管理已经是重中之重。港口作为货物、集装箱堆放及中转机构&#xff0c;具有昼夜不歇、天气多变、环境恶劣等特性&#xff0c;安全保卫工作显得更加重要。港口码头的巡检现场如何高效、快捷地对…