当前位置: 首页 > news >正文

PyTorch :三角函数与特殊运算

文章目录

  • PyTorch :三角函数与特殊运算
    • 一、三角函数:从基础到双曲
      • 1. 基础三角函数
        • (1)`torch.sin(input, out=None)`:正弦函数
        • (2)`torch.cos(input, out=None)`:余弦函数
        • (3)`torch.tan(input, out=None)`:正切函数
      • 2. 反三角函数
        • (1)`torch.asin(input, out=None)`:反正弦函数
        • (2)`torch.acos(input, out=None)`:反余弦函数
      • 3. 双曲三角函数
        • (1)`torch.sinh(input, out=None)`:双曲正弦函数
        • (2)`torch.cosh(input, out=None)`:双曲余弦函数
    • 二、常用特殊函数:`abs`、`sigmoid`、`sign`
      • 1. `torch.abs(input, out=None)`:绝对值函数
      • 2. `torch.sigmoid(input, out=None)`:Sigmoid 函数
      • 3. `torch.sign(input, out=None)`:符号函数
    • 三、其他特殊函数速览(图二补充)
    • 四、总结:函数分类与应用场景

PyTorch :三角函数与特殊运算

在深度学习中,除了基础的加减乘除,还会频繁用到三角函数(如 sincos)、特殊函数(如 sigmoidabs)等。这些函数是构建复杂模型(如物理仿真、激活函数设计)的基础。本文将系统讲解 PyTorch 中张量相关的三角函数常用特殊函数,涵盖函数原型、参数、示例及分析。

一、三角函数:从基础到双曲

三角函数用于处理角度与边长的关系,PyTorch 提供了完整的三角函数支持,包括基础三角函数(sincos 等)和双曲三角函数(sinhcosh 等)。

1. 基础三角函数

(1)torch.sin(input, out=None):正弦函数
  • 数学定义:计算张量中每个元素的正弦值,outi=sin⁡(inputi)\text{out}_i = \sin(\text{input}_i)outi=sin(inputi)
  • 参数
    • input:输入张量(元素通常为弧度值)。
    • out(可选):输出张量,存储结果。
  • 值域[−1,1][-1, 1][1,1]

代码示例

import torchx = torch.tensor([0, torch.pi/2, torch.pi], dtype=torch.float32)
result = torch.sin(x)
print("输入张量 x:", x)
print("sin(x) 结果:", result)

运行结果

输入张量 x: tensor([0.0000, 1.5708, 3.1416])
sin(x) 结果: tensor([0.0000, 1.0000, 0.0000])

结果分析

  • sin(0)=0sin(0) = 0sin(0)=0sin⁡(π/2)=1\sin(\pi/2) = 1sin(π/2)=1sin⁡(π)=0\sin(\pi) = 0sin(π)=0,与数学定义一致。
  • 输入需为弧度值(如 torch.pi 表示圆周率 π\piπ)。
(2)torch.cos(input, out=None):余弦函数
  • 数学定义:计算张量中每个元素的余弦值,outi=cos⁡(inputi)\text{out}_i = \cos(\text{input}_i)outi=cos(inputi)
  • 参数:同 torch.sin
  • 值域[−1,1][-1, 1][1,1]

代码示例

x = torch.tensor([0, torch.pi/2, torch.pi], dtype=torch.float32)
result = torch.cos(x)
print("cos(x) 结果:", result)

运行结果

cos(x) 结果: tensor([ 1.0000,  0.0000, -1.0000])

结果分析

  • cos⁡(0)=1\cos(0) = 1cos(0)=1cos⁡(π/2)=0\cos(\pi/2) = 0cos(π/2)=0cos⁡(π)=−1\cos(\pi) = -1cos(π)=1,符合数学规律。
(3)torch.tan(input, out=None):正切函数
  • 数学定义:计算张量中每个元素的正切值,outi=tan⁡(inputi)=sin⁡(inputi)/cos⁡(inputi)\text{out}_i = \tan(\text{input}_i) = \sin(\text{input}_i)/\cos(\text{input}_i)outi=tan(inputi)=sin(inputi)/cos(inputi)
  • 参数:同 torch.sin
  • 注意:当输入为 $ \pi/2 + k\pi$((k) 为整数)时,正切值会趋近于无穷大(inf)。

代码示例

x = torch.tensor([0, torch.pi/4, torch.pi/2 - 0.1], dtype=torch.float32)
result = torch.tan(x)
print("tan(x) 结果:", result)

运行结果

tan(x) 结果: tensor([0.0000, 1.0000, 9.9666])

结果分析

  • tan⁡(0)=0\tan(0) = 0tan(0)=0tan⁡(π/4)=1\tan(\pi/4) = 1tan(π/4)=1tan⁡(π/2−0.1)≈10\tan(\pi/2 - 0.1) \approx 10tan(π/20.1)10(因 π/2\pi/2π/2 附近正切值陡峭)。

2. 反三角函数

(1)torch.asin(input, out=None):反正弦函数
  • 数学定义:计算张量中每个元素的反正弦值,outi=arcsin⁡(inputi)\text{out}_i = \arcsin(\text{input}_i)outi=arcsin(inputi)
  • 参数:同 torch.sin
  • 定义域[−1,1][-1, 1][1,1],超出范围会返回 nan
  • 值域[−π/2,π/2][-\pi/2, \pi/2][π/2,π/2](弧度)。

代码示例

x = torch.tensor([-1.0, 0.0, 1.0], dtype=torch.float32)
result = torch.asin(x)
print("asin(x) 结果:", result)

运行结果

asin(x) 结果: tensor([-1.5708,  0.0000,  1.5708])

结果分析

  • arcsin⁡(−1)=−π/2\arcsin(-1) = -\pi/2arcsin(1)=π/2arcsin⁡(0)=0\arcsin(0) = 0arcsin(0)=0arcsin⁡(1)=π/2\arcsin(1) = \pi/2arcsin(1)=π/2,符合数学定义。
(2)torch.acos(input, out=None):反余弦函数
  • 数学定义:计算张量中每个元素的反余弦值,outi=arccos⁡(inputi)\text{out}_i = \arccos(\text{input}_i)outi=arccos(inputi)
  • 参数:同 torch.sin
  • 定义域:[-1, 1],超出范围返回 nan
  • 值域:[0, π\piπ](弧度)。

代码示例

x = torch.tensor([-1.0, 0.0, 1.0], dtype=torch.float32)
result = torch.acos(x)
print("acos(x) 结果:", result)

运行结果

acos(x) 结果: tensor([3.1416, 1.5708, 0.0000])

结果分析

  • arccos⁡(−1)=π\arccos(-1) = \piarccos(1)=πarccos⁡(0)=π/2\arccos(0) = \pi/2arccos(0)=π/2arccos⁡(1)=0\arccos(1) = 0arccos(1)=0,与数学规律一致。

3. 双曲三角函数

双曲函数是三角函数的“双曲版本”,常用于物理、工程等领域(如描述悬链线形状)。

(1)torch.sinh(input, out=None):双曲正弦函数
  • 数学定义outi=sinh⁡(inputi)=einputi−e−inputi2\text{out}_i = \sinh(\text{input}_i) = \frac{e^{\text{input}_i} - e^{-\text{input}_i}}{2}outi=sinh(inputi)=2einputieinputi
  • 参数:同 torch.sin
  • 值域(−∞,+∞)(-\infty, +\infty)(,+)

代码示例

x = torch.tensor([0.0, 1.0, -1.0], dtype=torch.float32)
result = torch.sinh(x)
print("sinh(x) 结果:", result)

运行结果

sinh(x) 结果: tensor([ 0.0000,  1.1752, -1.1752])

结果分析

  • sinh⁡(0)=0\sinh(0) = 0sinh(0)=0sinh⁡(1)≈1.1752\sinh(1) \approx 1.1752sinh(1)1.1752sinh⁡(−1)=−sinh⁡(1)\sinh(-1) = -\sinh(1)sinh(1)=sinh(1)(双曲正弦是奇函数)。
(2)torch.cosh(input, out=None):双曲余弦函数
  • 数学定义outi=cosh⁡(inputi)=einputi+e−inputi2\text{out}_i = \cosh(\text{input}_i) = \frac{e^{\text{input}_i} + e^{-\text{input}_i}}{2}outi=cosh(inputi)=2einputi+einputi
  • 参数:同 torch.sin
  • 值域:[1, +∞\infty]。

代码示例

x = torch.tensor([0.0, 1.0, -1.0], dtype=torch.float32)
result = torch.cosh(x)
print("cosh(x) 结果:", result)

运行结果

cosh(x) 结果: tensor([1.0000, 1.5431, 1.5431])

结果分析

  • cosh⁡(0)=1\cosh(0) = 1cosh(0)=1cosh⁡(1)≈1.5431\cosh(1) \approx 1.5431cosh(1)1.5431cosh⁡(−1)=cosh⁡(1)\cosh(-1) = \cosh(1)cosh(1)=cosh(1)(双曲余弦是偶函数)。

二、常用特殊函数:abssigmoidsign

这些函数在深度学习中高频使用(如 sigmoid 作为激活函数,abs 处理绝对值),需重点掌握。

1. torch.abs(input, out=None):绝对值函数

  • 数学定义:计算张量中每个元素的绝对值,outi=∣inputi∣\text{out}_i = |\text{input}_i|outi=inputi
  • 参数
    • input:输入张量(支持整数、浮点数)。
    • out(可选):输出张量,存储结果。
  • 用途:处理负数,确保结果非负。

代码示例

x = torch.tensor([-1, 2, -3.5], dtype=torch.float32)
result = torch.abs(x)
print("输入张量 x:", x)
print("abs(x) 结果:", result)

运行结果

输入张量 x: tensor([-1.0000,  2.0000, -3.5000])
abs(x) 结果: tensor([1.0000, 2.0000, 3.5000])

结果分析

  • 所有负数的符号被去除,结果为非负,符合绝对值定义。

2. torch.sigmoid(input, out=None):Sigmoid 函数

  • 数学定义outi=11+e−inputi\text{out}_i = \frac{1}{1 + e^{-\text{input}_i}}outi=1+einputi1
  • 参数:同 torch.abs
  • 值域(0,1)(0, 1)(0,1)
  • 用途:作为激活函数,将输入映射到 ((0, 1)) 区间,常用于二分类任务(如逻辑回归)。

代码示例

x = torch.tensor([-1.0, 0.0, 1.0], dtype=torch.float32)
result = torch.sigmoid(x)
print("sigmoid(x) 结果:", result)

运行结果

sigmoid(x) 结果: tensor([0.2689, 0.5000, 0.7311])

结果分析

  • 当输入为负无穷时,输出趋近于 0;输入为 0 时,输出为 0.5;输入为正无穷时,输出趋近于 1。
  • 上述示例中,sigmoid(−1)≈0.2689\text{sigmoid}(-1) \approx 0.2689sigmoid(1)0.2689sigmoid(0)=0.5\text{sigmoid}(0) = 0.5sigmoid(0)=0.5sigmoid(1)≈0.7311\text{sigmoid}(1) \approx 0.7311sigmoid(1)0.7311,符合函数曲线。

3. torch.sign(input, out=None):符号函数

  • 数学定义
  • $
    \text{out}_i =
    \begin{cases}
    1, & \text{若 } \text{input}_i > 0 \
    0, & \text{若 } \text{input}_i = 0 \
    -1, & \text{若 } \text{input}_i < 0
    \end{cases}
    $
  • 参数:同 torch.abs
  • 用途:提取元素的符号信息(正、负、零)。

代码示例

x = torch.tensor([-1, 0, 3.5], dtype=torch.float32)
result = torch.sign(x)
print("sign(x) 结果:", result)

运行结果

sign(x) 结果: tensor([-1.,  0.,  1.])

结果分析

  • 负数返回 -1,零返回 0,正数返回 1,精准提取符号信息。

三、其他特殊函数速览(图二补充)

除上述重点函数外,图二中还包含一些常用特殊函数,这里快速介绍核心功能:

函数名数学定义/功能典型用途
torch.erf()误差函数 erf(x)=2π∫0xe−t2dt\text{erf}(x) = \frac{2}{\sqrt{\pi}} \int_0^x e^{-t^2} dterf(x)=π20xet2dt统计分布、概率计算
torch.neg()取反运算 outi=−inputi\text{out}_i = -\text{input}_iouti=inputi符号反转
torch.reciprocal()倒数运算 outi=1/inputi\text{out}_i = 1/\text{input}_iouti=1/inputi数值倒数计算
torch.rsqrt()平方根的倒数 outi=1/inputi\text{out}_i = 1/\sqrt{\text{input}_i}outi=1/inputi优化器中的梯度缩放
torch.sign()符号函数提取符号信息
torch.lerp()线性插值 outi=inputi+α(endi−inputi)\text{out}_i = \text{input}_i + \alpha (\text{end}_i - \text{input}_i)outi=inputi+α(endiinputi)动画插值、模型融合
torch.cumsum()累加和(沿指定维度累加元素)前缀和计算、累计统计

四、总结:函数分类与应用场景

函数类型核心函数典型应用场景
基础三角函数sincostan物理仿真、信号处理
反三角函数asinacos几何计算、角度恢复
双曲三角函数sinhcosh工程建模(如悬链线)
特殊运算abs(绝对值)非负处理、误差计算
激活函数sigmoid二分类任务、逻辑回归
符号提取sign符号信息提取、数据清洗
  • 构建复杂的数学模型(如物理系统、概率分布);
  • 设计自定义激活函数(如 sigmoid 变体);
  • 处理数据中的符号、绝对值等特殊需求。
http://www.lryc.cn/news/610151.html

相关文章:

  • MFC-Ribbbon-图标-PS
  • 【秋招笔试】2025.08.03虾皮秋招笔试-第二题
  • 蜜汁整体二分——区间 kth
  • Next.js 中的文件路由:工作原理
  • 秋招笔记-8.4
  • 软件需求关闭前的质量评估标准是什么
  • Java项目:基于SSM框架实现的商铺租赁管理系统【ssm+B/S架构+源码+数据库+毕业论文+开题报告+任务书+远程部署】
  • 优化 Unity ConstantForce2D 性能的简单方法【资料】
  • 2025年08月04日Github流行趋势
  • 无偿分享120套开源数据可视化大屏H5模板
  • WSL安装Ubuntu与Docker环境,比VMware香
  • Flutter 对 Windows 不同版本的支持及 flutter_tts 兼容性指南
  • 离线Docker项目移植全攻略
  • Oracle 在线重定义
  • [GYCTF2020]FlaskApp
  • 【编程实践】点云曲率计算与可视化
  • 八股——Kafka相关
  • 【Pytorch✨】LSTM04 l理解长期记忆和短期记忆
  • 第12届蓝桥杯Scratch_选拔赛_初级组_真题2020年8月23日
  • 神经网络---非线性激活
  • C++进阶-封装红黑树模拟实现map和set(难度较高)
  • 李沐写作笔记
  • 嵌入式 C 语言入门:函数指针基础笔记 —— 从计算器优化到指针本质
  • SurferCloud vs LightNode 海外云服务商详细对比
  • 【无标题】标准 I/O 中的一些函数,按功能分类说明其用法和特点
  • [特殊字符] 50 天 50 个项目 — 完结篇
  • 【Docker安装】Ubuntu 24.04.2 LTS系统下安装Docker环境——指定APT源安装方式
  • 基于MobileNet卷积神经网络和Xception神经网络算法的人脸表情识别系统的设计与实现
  • C语言的控制语句
  • 每日一leetcode:移动零