当前位置: 首页 > 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.dtcms.com/a/311379.html

相关文章:

  • 隧道照明“隐形革命”:智能控制如何破解安全与节能双重命题
  • k8s集群部署(脚本版)
  • 面经——电子电路技术知识详解
  • 【Leetcode hot 100】49.字母异位词分组
  • 详解Python标准库之互联网数据处理
  • winscp 连openwrt 返回127错误码
  • wxPython 实践(六)对话框
  • 【iOS】strong和copy工作流程探寻、OC属性关键字复习
  • Android 运行 deno 的新方法 (3): Termux 胖喵安初
  • Flutter镜像替换
  • 【Android】通知
  • 历史数据分析——中青旅
  • 【Linux网络】:UDP(传输层协议)
  • 大数据之路:阿里巴巴大数据实践——OneData数据中台体系
  • python测试总结
  • AIDL当Parcelable序列化的数据类通信时报“Class not found when unmarshalling“找不到该类时的解决方案
  • 【一天一个知识点】RAG遇见推理
  • Linux内核进程管理子系统有什么第十六回 —— 进程主结构详解(12)
  • AIGC系列:本地部署大模型
  • appium中urllib3.exceptions.LocationValueError: No host specified. 的错误解决办法
  • 第15届蓝桥杯Pthon青少组_国赛_中/高级组_2024年9月7日真题
  • 【Linux】多路转接之epoll
  • 使用AWS免费EC2自建RustDesk远程桌面连接服务
  • 什么是AWS Region和AWS Availability Zones
  • 全球化 2.0 | 中国香港教育机构通过云轴科技ZStack实现VMware替代
  • AWS上部署Spring Boot应用的完整指南
  • Allegro-导入网表的两种方式
  • GaussDB having 的用法
  • Ubuntu系统VScode实现opencv(c++)图像翻转和旋转
  • 电力系统分析笔记:发电机与变压器的数学建模与运行状态详解