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分解)。
相关推荐
__lost15 分钟前
Python图像变清晰与锐化,调整对比度,高斯滤波除躁,卷积锐化,中值滤波钝化,神经网络变清晰
python·opencv·计算机视觉
海绵波波10720 分钟前
玉米产量遥感估产系统的开发实践(持续迭代与更新)
python·flask
欣然~23 分钟前
借助 OpenCV 和 PyTorch 库,利用卷积神经网络提取图像边缘特征
人工智能·计算机视觉
谦行33 分钟前
工欲善其事,必先利其器—— PyTorch 深度学习基础操作
pytorch·深度学习·ai编程
逢生博客1 小时前
使用 Python 项目管理工具 uv 快速创建 MCP 服务(Cherry Studio、Trae 添加 MCP 服务)
python·sqlite·uv·deepseek·trae·cherry studio·mcp服务
堕落似梦1 小时前
Pydantic增强SQLALchemy序列化(FastAPI直接输出SQLALchemy查询集)
python
白熊1881 小时前
【计算机视觉】CV实战项目 - 基于YOLOv5的人脸检测与关键点定位系统深度解析
人工智能·yolo·计算机视觉
nenchoumi31191 小时前
VLA 论文精读(十六)FP3: A 3D Foundation Policy for Robotic Manipulation
论文阅读·人工智能·笔记·学习·vln
后端小肥肠1 小时前
文案号搞钱潜规则:日入四位数的Coze工作流我跑通了
人工智能·coze
LCHub低代码社区1 小时前
钧瓷产业原始创新的许昌共识:技术破壁·产业再造·生态重构(一)
大数据·人工智能·维格云·ai智能体·ai自动化·大禹智库·钧瓷码