神经网络的核心:简单易懂理解 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,一种为处理大型输出空间而设计的高效激活函数。每个函数都配备了详细的参数解释、使用技巧和注意事项,旨在为读者提供全面的理解。无论是图像处理、文本分类还是复杂的自然语言处理任务,这些函数都是构建高效、稳定的神经网络模型的重要工具。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

数据摆渡会遇到哪些风险?要如何应对?

数据摆渡(Data Shuttle)是一种在不同网络环境之间安全、可控地传输数据的过程。在企业环境中,这通常涉及到将数据从内部网络(内网)传输到外部网络(外网),或者在多个隔离的内部网络之…

安恒2023全球高级威胁态势研究报告(网盘下载)

《2023全球高级威胁态势研究报告》 2023 年,一系列新兴威胁的不断涌现,使得网络安全面临着前所未有的挑战。过去一年,我们目睹了地缘政治动荡、科技进步和人类活动的交织,进一步深刻地塑造了数字时代的未来。 在此背景下&#xff…

java 体育明星管理系统Myeclipse开发mysql数据库web结构java编程计算机网页项目

一、源码特点 java Web 体育明星管理系统是一套完善的java web信息管理系统,对理解JSP java编程开发语言有帮助,系统具有完整的源代码和数据库,系统主要采用B/S模式开发。开发环境为 TOMCAT7.0,Myeclipse8.5开发,数据库为Mysq…

3.2 MAPPING THREADS TO MULTIDIMENSIONAL DATA

1D、2D或3D线程组织的选择通常基于数据的性质。图片是2D像素阵列。使用由2D块组成的2D网格通常可以方便地处理图片中的像素。图3.2显示了处理7662图片P的这种安排(水平或x方向为76像素,垂直或y方向为62像素)。假设我们决定使用16 x 16块&…

MyBatis实战指南(一):从概念到特点,助你快速上手,提升开发效率!

嗨~ 今天的你过得还好吗? 如果命运是世界上最烂的编剧 你就要争取做你人生最好的演员 🌞 - 2024.01.08 - MyBatis是一个优秀的持久层框架,它支持定制化SQL、存储过程以及高级映射。MyBatis避免了几乎所有的JDBC代码和手动设置参数以及获取…

【百科物理】-2.重力与浮力

导入 问题: 灯掉下来,重力太大,掉下来。 重力来源于地球,地球上所有的东西都受重力向下落。 搬箱子,搬东西沉,是受重力的影响,重力的方向是竖直向下的。 万有引力:任何两个物体之间都…

flutter项目用vscode打包apk包,完美运行到手机上

1.创建密钥库 执行以下命令: keytool -genkey -v -keystore F:/key.jks -keyalg RSA -keysize 2048 -validity 10000 -alias key 生成 2,048 位RSA密钥对和自签名证书 (SHA256withRSA) (有效期为 10,000 天) 2.填写密钥内容 执行以上命令后会提示一次输入密钥库密码、确认…

MySQL取出N列里最大or最小的一个数据

如题,现在有3列,都是数字类型,要取出这3列里最大或最小的的一个数字 -- N列取最小 SELECT LEAST(temperature_a,temperature_b,temperature_c) min FROM infrared_heat-- N列取最大 SELECT GREATEST(temperature_a,temperature_b,temperat…

解决matplotlib中文乱码问题

一、修改配置文件,一劳永逸的方法 1. 首先,下载SimHei字体(即SimHei.tff包)下载地址:SimHei.ttf|字体下载 2. 下载好之后,找到matplotlib文件夹,如下图所示: 如果找不到matplotlib…

服务容错-熔断策略之断路器hystrix-go

文章目录 概要一、服务熔断二、断路器模式三、hystrix-go3.1、使用3.2、源码 四、参考 概要 微服务先行者Martin Fowler与James Lewis在文章microservices中指出了微服务的九大特征,其中一个便是容错性设计(Design for failure)。正如文章中提到的,微服…

结构型设计模式——桥接模式

桥接模式 如果一个系统需要在抽象化和具体化之间增加更多的灵活性,避免在两个层次之间建立静态的继承关系,通过桥接模式可以使它们在抽象层建立一个关联关系(参考案例:即视频文件格式对象成为操作系统类的一个成员变量&#xff0…

Redis之集群方案比较

哨兵模式 在redis3.0以前的版本要实现集群一般是借助哨兵sentinel工具来监控master节点的状态,如果master节点异常,则会做主从切换,将某一台slave作为master,哨兵的配置略微复杂,并且性能和高可用性等各方面表现一般&a…

Java智慧工地可视化APP信息管理平台源码(项目端、监管端、数据大屏端、APP端)

一、智慧工地信息化解决方案 智慧工地系统以推进施工过程管理信息化、数字化、智慧化为手段,促进第五代通信技术 (5G) 、大数据、智能设备、人工智能等与建筑工程管理进一步融合。智慧化工地建设全面加速,以数字技术助力建筑工地转型升级、提速增效、提…

SSC使用总结

文章目录 写在前面一、SSC工具能做什么二、下载安装三、使用教程1. 新建2. 信息配置3. 生成源码4. 创建EXCEL配置文件 写在前面 Slave Stack Code Tool(简称SSC Tool,后文直接用SSC表示),它是EtherCAT从站协议栈生成工具&#xf…

使用proteus进行主从JK触发器仿真失败原因的分析

在进行JK触发器的原理分析的时候,我首先在proteus根据主从JK触发器的原理进行了实验根据原理图,如下图: 我进行仿真,在仿真的过程中,我向电路图中添加了外部的置0/1端口,由此在proteus中得到下面的电路图 …

虹科技术|PCAN网关设备:打通通信壁垒,LED指示灯编程示例

导读:在工业自动化、汽车、机械等行业,CAN总线协议被广泛应用。随着技术的发展,CAN FD(CAN with Flexible Data-Rate)应运而生,作为传统CAN的升级版,它具有更高的通信波特率和更长的数据帧&…

自监督深度学习技术

一、定义 自监督学习(SSL)是机器学习的一种范式,用于处理未标记数据以获取有用的表示,以帮助下游学习任务。SSL方法最显著的特点是它们不需要人类标注的标签,这意味着它的训练完全基于由未标记的数据样本组成的数据集…

移动通信原理与关键技术学习(3)

1.什么是相干解调?什么是非相干解调?各自的优缺点是什么? 相干解调需要在接收端有一个与发送端一样的载波(同样的频率和相位),在接收端的载波与发送端载波进行互相关操作,去除载波的影响。相干…

SSM框架学习笔记01 | 注解开发

文章目录 1. 注解形式定义bean2.纯注解开发3.bean管理4. 依赖注入5. 第三方bean管理总结 1. 注解形式定义bean Compoenet ControllerServiceRepository 配合代码块 <context:component-scan /> 使用 2.纯注解开发 Configuration ComponentScan AnnotationConfigApplicati…

听GPT 讲Rust源代码--compiler(35)

File: rust/compiler/rustc_middle/src/query/on_disk_cache.rs 首先&#xff0c;on_disk_cache.rs文件位于Rust编译器的compiler/rustc_middle/src/query目录下&#xff0c;其作用是实现Rust编译器的磁盘缓存功能。 以下是对每个结构体的详细介绍&#xff1a; OnDiskCache<…