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

news2024/11/26 18:44:53

目录

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.coloradmin.cn/o/1366029.html

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

相关文章

FineBI实战项目一(9):每日不同支付方式订单总额/订单笔数

1 明确数据分析目标 统计每种支付方式的订单个数以及订单总金额 2 创建用于保存数据分析结果的表 create table app_order_paytype(id int primary key auto_increment,dt date,pay_type varchar(20),total_money double,total_cnt int ); 3 编写SQL语句进行数据分析 selec…

vue3 修饰符大全(近万字长文)

系列文章目录 TypeScript 从入门到进阶专栏 文章目录 系列文章目录前言一、事件修饰符(Event Modifiers)1、.stop(阻止事件冒泡)2、.prevent(阻止事件的默认行为)3、.capture(使用事件捕获模式…

何为算法之空间复杂度

前言 不知前面所讲的算法的十大特征你是否记住了呢?其实除了这十大特征之外,算法还有两个衡量标准。 不同的问题需要使用不同的算法作为策略,不同的算法也可能占用不同的时间和空间来完成相同的任务,这时候,对算法的选…

强化学习的数学原理学习笔记 - RL基础知识

文章目录 Roadmap🟡基础概念贝尔曼方程(Bellman Equation)基本形式矩阵-向量形式迭代求解状态值 vs. 动作值 🟡贝尔曼最优方程(Bellman Optimality Equation,BOE)基本形式迭代求解 本系列文章介…

alibabacloud学习笔记02(小滴课堂)

什么是注册中心和常见的注册中心有哪些 介绍什么是Nacos和搭建实战 启动Nacos 使用前要先安装jdk。 linux学习专栏笔记中有,大家可以去看。 关闭nacos: 这样我们就登录了nacos。 项目集成Nacos实现服务直接的调用 每个子模块都去添加。 给每个子模块配置nacos配…

ReentrantLock底层原理学习二

以 ReentrantLock 作为切入点,来看看在这个场景中是如何使用 AQS 来实现线程的同步的 ReentrantLock 的时序图 调用 ReentrantLock 中的 lock()方法,源码的调用过程我使用了时序图来展现。ReentrantLock.lock() 这个是 reentrantLock 获取锁的入口 pu…

小H靶场笔记:DC-4

DC-4 January 4, 2024 2:37 PM Tags: teehee提权 Owner:只惠摸鱼 信息收集 探测靶机ip,发现应该是192.168.199.134 扫一下开放端口(22、80)、服务、版本、漏洞 根据扫描结果,在80端口可能有CSRF漏洞,…

好书推荐丨人工智能B2B落地实战:基于云和Python的商用解决方案(清华社)

文章目录 写在前面人工智能推荐图书图书简介简明目录 推荐理由粉丝福利写在后面 写在前面 本期博主给大家推荐一本全新正版的好书:《人工智能B2B落地实战:基于云和Python的商用解决方案》!这本书来自清华大学出版社,是今年刚刚出…

十八:爬虫-JS逆向(下)

一:AES与DES DES对称加密,是一种比较传统的加密方式,其加密运算、解密运算使用的是同样的密钥,信息的发送者。和信息的接收者在进行信息的传输与处理时,必须共同持有该密钥(称为对称密码),是一种对称加密算法。一般来说加密用的是encrypt()函…

Linux服务器安装操作Nginx

1.下载nginx压缩包 //进入/usr/local目录创建一个文件夹 cd /usr/local mkdir nginx cd nginx //下载tar包 wget http://nginx.org/download/nginx-1.20.1.tar.gz 2.配置nginx安装所需的环境 1. 安装gcc 安装 nginx 需要先将官网下载的源码进行编译,编译依赖 gc…

Linux查找命令@which、find

目录 which概念语法作用 find概念语法按文件名查找按文件大小查找 作用演示一演示二演示三 通配符 总结 which 概念 which 是一个常用的 Linux/Unix 命令,用于查找并显示指定命令的绝对路径。 语法 which 要查找的命令 》无参数。 》 which后面,跟要查…

Android studio Progress Bar 进度条应用设计

一、水平进度条: 1)、xml布局文件: 2)、java文件: progressBar1 = findViewById(R.id.progressBar); progressBar2 = findViewById(R.id.progressBar2); public class AlarmTask extends TimerTask {@Overridepublic void run() {progressValue++;if (progressVa…

计网知识点回归

概述 计算机网络的定义: 不同地理位置的计算机通过通信电路实现资源共享 计算机网络的组成: 资源子网——提供共享的软硬件资源 通信子网——提供信息交换的网络接点和通信线路 计算机网络分类: 按拓扑分:星形 树形 总线型 环形…

清华大学生物信息学课件资料分享

清华大学鲁志老师实验室在网上分享了他们的生信课程学习资料,有电子书,PPT和视频,真是生信学习者的福音。 实验室网址是: https://www.ncrnalab.org/courses/#bioinfo2 可以看到,课程有针对本科生的,也有针…

shp文件与数据库(创建表)

前言 第三方库准备 shp文件是什么?笔者就不多做解释。后面将使用python的一些第三方库 1、sqlalchemy 2、pyshp 3、geoalchemy2 4、geopandas 这四个是主要的库,具体怎么使用可以参考相关教程,当然还有其他库,后面在介绍。…

uniapp 微信小程序跳转外部链接

一、背景: 开发小程序时,跳转到内部路径通常会使用:uni.navigateTo,uni.redirectTo,uni.reLaunch,uni.switchTab等方法,可以跳转到pages.json中已经注册的页面 uni.navigateTo(OBJECT) | uni-…

【KingbaseES】DataGrip配置链接KingbaseES V8R6数据库

新建驱动 填写内容如下: defaultjdbc:kingbase8://{host::localhost}:[{port::54321}]/[{:database::test}] 点击OK保存 测试链接 出现上图证明已经能链接了,保存链接看看数据库是否有我们的数据 发现好像什么都没有 再尝试,发现现在可以…

前端发开的性能优化 请求级:请求前(资源预加载和预读取)

预加载 预加载:是优化网页性能的重要技术,其目的就是在页面加载过程中先提前请求和获取相关的资源信息,减少用户的等待时间,提高用户的体验性。预加载的操作可以尝试去解决一些类似于减少首次内容渲染的时间,提升关键资…

ArkTS - 数据持久化

一、概述 应用数据持久化,是指应用将内存中的数据通过文件或数据库的形式保存到设备上。内存中的数据形态通常是任意的数据结构或数据对象,存储介质上的数据形态可能是文本、数据库、二进制文件等。 持久(Persistence)&#xff0…

如何查看崩溃日志

​ 目录 描述 思路 查看ipa包崩溃日志 简单查看手机崩溃信息几种方式 方式1:手机设置查看崩溃日志 方式2: Xocde工具 方式3: 第三方软件克魔助手 环境配置 实时日志 奔溃日志分析 方式四:控制台资源库 线上崩溃日志 线上监听crash的几种方式 方式1: 三…