PyTorch张量运算函数

文章目录

🍃作者介绍:双非本科大三网络工程专业在读,阿里云专家博主,专注于Java领域学习,擅长web应用开发、数据结构和算法,初步涉猎人工智能和前端开发。

🦅个人主页:@逐梦苍穹

📕所属专栏:人工智能

🌻gitee地址:xzl的人工智能代码仓库

✈ 您的一键三连,是我创作的最大动力🌹

1、代码

PyTorch 为每个张量封装很多实用的计算函数,例如计算均值、平方根、求和等等

torch.mean(input, dim=None, keepdim=False, *, dtype=None)

  • input:输入的张量。
  • dim:要计算均值的维度。如果没有指定,则计算整个张量的均值。
  • keepdim:是否保持原有维度,默认为 False。如果设为 True,输出张量将保持输入张量的维度。
  • dtype:指定返回张量的数据类型。
python 复制代码
# -*- coding: utf-8 -*-
# @Author: CSDN@逐梦苍穹
# @Time: 2024/7/19 2:16
import torch


def test():
    data = torch.randint(0, 10, [2, 3], dtype=torch.float64)
    print(data)
    print('-' * 50)
    # 1. 计算均值
    # 注意: tensor 必须为 Float 或者 Double 类型
    print(data.mean())
    print(data.mean(dim=0))  # 按列计算均值
    print(data.mean(dim=1))  # 按行计算均值
    print('-' * 50)
    # 2. 计算总和
    print(data.sum())
    print(data.sum(dim=0))
    print(data.sum(dim=1))
    print('-' * 50)
    # 3. 计算平方
    print(data.pow(2))
    print('-' * 50)
    # 4. 计算平方根
    print(data.sqrt())
    print('-' * 50)
    # 5. 指数计算, e^n 次方
    print(data.exp())
    print('-' * 50)
    # 6. 对数计算
    print(data.log())  # 以 e 为底
    print(data.log2())
    print(data.log10())


if __name__ == '__main__':
    test()

程序运行结果:

复制代码
E:\anaconda3\python.exe D:\Python\AI\PyTorch\14-张量计算.py 
tensor([[3., 2., 6.],
        [2., 5., 5.]], dtype=torch.float64)
--------------------------------------------------
tensor(3.8333, dtype=torch.float64)
tensor([2.5000, 3.5000, 5.5000], dtype=torch.float64)
tensor([3.6667, 4.0000], dtype=torch.float64)
--------------------------------------------------
tensor(23., dtype=torch.float64)
tensor([ 5.,  7., 11.], dtype=torch.float64)
tensor([11., 12.], dtype=torch.float64)
--------------------------------------------------
tensor([[ 9.,  4., 36.],
        [ 4., 25., 25.]], dtype=torch.float64)
--------------------------------------------------
tensor([[1.7321, 1.4142, 2.4495],
        [1.4142, 2.2361, 2.2361]], dtype=torch.float64)
--------------------------------------------------
tensor([[ 20.0855,   7.3891, 403.4288],
        [  7.3891, 148.4132, 148.4132]], dtype=torch.float64)
--------------------------------------------------
tensor([[1.0986, 0.6931, 1.7918],
        [0.6931, 1.6094, 1.6094]], dtype=torch.float64)
tensor([[1.5850, 1.0000, 2.5850],
        [1.0000, 2.3219, 2.3219]], dtype=torch.float64)
tensor([[0.4771, 0.3010, 0.7782],
        [0.3010, 0.6990, 0.6990]], dtype=torch.float64)

Process finished with exit code 0

2、数学

  1. 张量(Tensor) :
    • 张量是一种多维数组,可以看作是标量(0阶张量)、向量(1阶张量)、矩阵(2阶张量)的高阶推广。
    • 一个 ( n ) (n) (n)维的张量可以表示为 ( T ∈ R d 1 × d 2 × ⋯ × d n ) ( T \in \mathbb{R}^{d_1 \times d_2 \times \cdots \times d_n} ) (T∈Rd1×d2×⋯×dn),其中 ( d i ) (d_i) (di)是第 ( i ) (i) (i) 维的大小。
  2. 张量维度(Rank) :
    • 张量的维度也称为它的阶(Rank)。一个标量是0阶张量,一个向量是1阶张量,一个矩阵是2阶张量,依此类推。

张量运算

  1. 张量加法和减法 :
    • 仅当两个张量的维度完全相同时,才能进行加法和减法运算。运算是逐元素进行的。
    • 例如,两个3维张量 ( A , B ∈ R d 1 × d 2 × d 3 ) ( A, B \in \mathbb{R}^{d_1 \times d_2 \times d_3} ) (A,B∈Rd1×d2×d3)的加法为: C i j k = A i j k + B i j k C_{ijk} = A_{ijk} + B_{ijk} Cijk=Aijk+Bijk
  2. 张量乘法 :
    • 逐元素乘法(Element-wise Multiplication):

      • 也称为Hadamard乘积,仅适用于维度相同的张量,逐元素相乘。

        C i j k = A i j k × B i j k \] \[ C_{ijk} = A_{ijk} \\times B_{ijk} \] \[Cijk=Aijk×Bijk

    • 点积(Dot Product):

      • 适用于两个向量,产生一个标量: c = ∑ i = 1 n a i ⋅ b i c = \\sum_{i=1}\^{n} a_i \\cdot b_i c=∑i=1nai⋅bi
    • 矩阵乘法(Matrix Multiplication):

      • 适用于两个矩阵 ( A ∈ R m × n ) 和 ( B ∈ R n × p ) (A \in \mathbb{R}{m \times n}) 和 (B \in \mathbb{R}{n \times p}) (A∈Rm×n)和(B∈Rn×p),产生一个新的矩阵 ( C ∈ R m × p ) (C \in \mathbb{R}^{m \times p}) (C∈Rm×p):
    • 张量积(Tensor Product):

      • 两个张量的乘积,结果的维度是原始两个张量维度的和。例如, ( A ∈ R d 1 × d 2 ) ( A \in \mathbb{R}{d_1 \times d_2} ) (A∈Rd1×d2)和 ( B ∈ R d 3 × d 4 ) ( B \in \mathbb{R}{d_3 \times d_4} ) (B∈Rd3×d4) 的张量积 ( C ∈ R d 1 × d 2 × d 3 × d 4 ) ( C \in \mathbb{R}^{d_1 \times d_2 \times d_3 \times d_4} ) (C∈Rd1×d2×d3×d4): C i j k l = A i j ⋅ B k l C_{ijkl} = A_{ij} \\cdot B_{kl} Cijkl=Aij⋅Bkl
  3. 张量缩并(Tensor Contraction) :
    • 也称为张量内积(Inner Product),是一种沿指定维度的求和操作。比如,两个3维张量 ( A ) 和 ( B ) 在维度2上的缩并: C i k = ∑ j A i j ⋅ B j k C_{ik} = \\sum_{j} A_{ij} \\cdot B_{jk} Cik=∑jAij⋅Bjk
  4. 张量转置(Tensor Transpose) :
    • 类似于矩阵转置,但适用于高维张量。通过改变张量维度的顺序来实现。例如,一个 ( 3 × 4 × 5 ) ( 3 \times 4 \times 5 ) (3×4×5)的张量 ( T ) ( T ) (T) 转置为 ( 4 × 3 × 5 ) ( 4 \times 3 \times 5 ) (4×3×5)。

数学原理

张量运算的数学原理主要来自线性代数和多重线性代数。

  1. 线性代数基础 :
    • 张量可以看作是向量和矩阵的推广,因此线性代数中的基本运算(如加法、乘法、转置)都可以推广到张量。
  2. 多重线性代数 :
    • 研究多维数组(张量)的性质及其运算,如张量积、张量分解(如CP分解、Tucker分解)。
相关推荐
Smoothcloud润云5 小时前
PyTorch推理服务模型热切换与失败回滚实战:降低版本更新中断
服务器·人工智能·pytorch·python·深度学习·gpu
冬奇Lab5 小时前
开源项目第236期:PentAGI — 全自主渗透测试多智能体系统,自带 20+ 专业工具箱
人工智能·开源·资讯
forest_095 小时前
Agent 系列02|Agent 架构全景图
人工智能·架构·prompt·agi
YangYang9YangYan6 小时前
2027供应链计划校招:数学与应用数学专业如何把预测模型讲成业务决策?
人工智能·sql·算法
jsjzsl26 小时前
递归自改进系统(RSI)的本质是自发对称破缺:智能爆炸有界—— AI研发切记盲目投入
人工智能·python·算法
天远数科6 小时前
零信任架构实战:基于天远贷前风险报告构建自动化消金信贷风控与多头共债排查网关
运维·人工智能·架构·自动化
冬奇Lab6 小时前
LLM 驱动的自动化测试系列(12):像素 diff 之外,谁真的在让 LLM「看懂」UI 变化
人工智能·测试
派小心.6 小时前
小程序分享链路中来源参数的传递校验
大数据·前端·数据库·人工智能·小程序·数据分析
2601_954811826 小时前
机器视觉教学套件选型指南:五维技术参数对比与课程体系评估
python·数码相机
AI创界者6 小时前
摆脱云端API限制!Index-Translate 本地化部署整合包与实战:6GB显存畅跑150种语言,支持超长文本、字幕与API调用
人工智能·aigc