深度学习02-pytorch-04-张量的运算函数

news2024/11/15 21:46:50

在 PyTorch 中,张量(tensor)运算是核心操作之一,PyTorch 提供了丰富的函数来进行张量运算,包括数学运算、线性代数、索引操作等。以下是常见的张量运算函数及其用途:

1. 基本数学运算

  • 加法运算torch.add(a, b) 或者直接使用 +

    a = torch.tensor([1, 2])
    b = torch.tensor([3, 4])
    c = torch.add(a, b)  # [4, 6]
    # 或者
    c = a + b

  • 减法运算torch.sub(a, b) 或者直接使用 -

    c = torch.sub(a, b)  # [-2, -2]
    # 或者
    c = a - b

  • 乘法运算(逐元素)torch.mul(a, b) 或者直接使用 *

    c = torch.mul(a, b)  # [3, 8]
    # 或者
    c = a * b

  • 除法运算(逐元素)torch.div(a, b) 或者直接使用 /

    c = torch.div(a, b)  # [0.3333, 0.5]
    # 或者
    c = a / b

  • 指数运算torch.pow(a, b) 或者 a ** b

    c = torch.pow(a, b)  # a^b -> [1^3, 2^4] = [1, 16]
    # 或者
    c = a ** b

  • 求幂函数torch.sqrt(a)torch.exp(a)torch.log(a)

    c = torch.sqrt(torch.tensor([4.0, 9.0]))  # [2.0, 3.0]
    d = torch.exp(torch.tensor([1.0, 2.0]))  # e^1, e^2
    e = torch.log(torch.tensor([1.0, 2.0]))  # log(1), log(2)

2. 聚合操作

  • 求和torch.sum(tensor, dim=None)

    a = torch.tensor([[1, 2], [3, 4]])
    total_sum = torch.sum(a)  # 全局求和: 10
    row_sum = torch.sum(a, dim=1)  # 对每一行求和: [3, 7]

  • 求平均值torch.mean(tensor, dim=None)

    avg = torch.mean(a.float())  # 平均值: 2.5

  • 最大值torch.max(tensor)torch.max(tensor, dim)

    max_val = torch.max(a)  # 最大值: 4
    max_val_row, idx = torch.max(a, dim=1)  # 每一行的最大值: [2, 4]

  • 最小值torch.min(tensor)torch.min(tensor, dim)

    min_val = torch.min(a)  # 最小值: 1

  • 标准差torch.std(tensor)

    std = torch.std(a.float())  # 标准差

3. 线性代数运算

  • 矩阵乘法torch.mm(a, b) 或者使用 @

    a = torch.tensor([[1, 2], [3, 4]])
    b = torch.tensor([[5, 6], [7, 8]])
    c = torch.mm(a, b)  # 矩阵乘法
    # 或者
    c = a @ b

  • 矩阵转置torch.t(tensor) 或者使用 .T

    a_t = torch.t(a)  # 转置
    # 或者
    a_t = a.T

  • 矩阵求逆torch.inverse(tensor)

    a = torch.tensor([[1.0, 2.0], [3.0, 4.0]])
    a_inv = torch.inverse(a)  # 求矩阵的逆

  • 行列式torch.det(tensor)

    det = torch.det(a)  # 计算行列式

  • 特征值和特征向量torch.eig(tensor, eigenvectors=True)

    e_vals, e_vecs = torch.eig(a, eigenvectors=True)  # 计算特征值和特征向量

4. 张量形状操作

  • 张量重塑torch.reshape(tensor, new_shape)tensor.view(new_shape)

    a = torch.tensor([[1, 2], [3, 4], [5, 6]])
    reshaped = torch.reshape(a, (2, 3))  # 改变形状为 (2, 3)

  • 张量扩展torch.unsqueeze(tensor, dim)torch.squeeze(tensor, dim)

    a = torch.tensor([1, 2, 3])
    unsqueezed = torch.unsqueeze(a, 0)  # 在第0维添加一个新维度 -> [[1, 2, 3]]
    squeezed = torch.squeeze(unsqueezed)  # 移除维度 -> [1, 2, 3]

  • 拼接张量torch.cat(tensors, dim)torch.stack(tensors, dim)

    a = torch.tensor([1, 2])
    b = torch.tensor([3, 4])
    concatenated = torch.cat((a, b), dim=0)  # 拼接 -> [1, 2, 3, 4]
    
    stacked = torch.stack((a, b), dim=0)  # 堆叠 -> [[1, 2], [3, 4]]

5. 索引操作

  • 通过索引选择元素tensor[index]

    a = torch.tensor([[1, 2], [3, 4], [5, 6]])
    selected = a[0, 1]  # 选择第0行第1列的元素 -> 2

  • 高级索引tensor[range]、布尔索引等

    a = torch.tensor([1, 2, 3, 4, 5])
    selected = a[a > 3]  # 选择大于3的元素 -> [4, 5]

6. 随机数生成

  • 均匀分布随机数torch.rand(size)

    random_tensor = torch.rand(3, 3)  # 生成一个 3x3 的均匀分布随机张量

  • 正态分布随机数torch.randn(size)

    normal_random = torch.randn(3, 3)  # 生成一个 3x3 的正态分布随机张量

  • 指定范围的整数随机数torch.randint(low, high, size)

    randint_tensor = torch.randint(0, 10, (3, 3))  # 生成 0 到 10 之间的随机整数

7. 广播机制

  • 广播运算:当张量的形状不同,但维度兼容时,PyTorch 会自动应用广播机制扩展张量。

    a = torch.tensor([1, 2, 3])
    b = torch.tensor([[1], [2], [3]])
    c = a + b  # 广播操作

8. 自动微分

  • 启用自动微分requires_grad=True

    x = torch.tensor(2.0, requires_grad=True)
    y = x ** 2
    y.backward()  # 计算梯度
    print(x.grad)  # 输出: 4.0

总结

PyTorch 中的张量运算函数非常丰富,从基本的数学运算到高级的线性代数操作、形状调整和随机数生成,这些函数让张量的处理非常灵活和高效。通过这些运算,你可以实现各种数值计算和深度学习模型的训练。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2155203.html

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

相关文章

【TypeScript入坑】TypeScript 的复杂类型「Interface 接口、class类、Enum枚举、Generics泛型、类型断言」

TypeScript入坑 Interface 接口简介接口合并TS 强校验Interface 里支持方法的写入class 类应用接口接口之间互相继承接口定义函数interface 与 type 的异同小案例 class 类类的定义与继承类的访问类型构造器 constructor静态属性,Setter 和 Getter做个小案例抽象类 …

Tomcat中BIO和NIO的区别(Tomcat)

BIO Tomcat中BIO的模型和理论很简单,例图如下 1.Acceptor线程死循环阻塞接收客户端的打过来的socket请求 2.接收到请求之后打包成一个SocketProcessor(Runnable),扔到线程池中读取/写入数据 参数配置 1.Acceptor默认线程是1&#…

Day06微信小程序微信登录

微信小程序微信登录 1. 第一:小程序要先发给后端code(只能用一次), 2. 后端要结合数据发给(用get的方式) https://api.weixin.qq.com/sns/jscode2session 数据: appidstring小程序的appIdsecretstring小程序的app…

华为为什么要做三折叠屏手机?

前些天我做了一条视频,关于讲华W的新的三折叠屏手机。我说我有点失望,结果引起了华W的同事的一些关注。于是,华W几位高管都跑过来,跟我解释为什么会出现这样的一个状态。 我才知道,这款手机他们其实是亏着钱在卖的。因…

【大模型实战篇】关于Bert的一些实操回顾以及clip-as-service的介绍

最近在整理之前的一些实践工作,一方面是为了笔记记录,另一方面也是自己做一些温故知新,或许对于理解一些现在大模型工作也有助益。 1. 基于bert模型实现中文语句的embedding编码 首先是基于bert模型实现中文语句的embedding编码,…

使用库函数点亮一个LED灯

软件设计 STM32Gpio的介绍 如果想让LED0点亮,那么R12就要是高电平,LED0就要是低电平,也就是PF9就是低电平 F407系统主频要工作在168MHZ F103的话是工作在72mhz F429的话就180MHZ 接着我们就要使能Gpio的时钟,使能之后对GPIO相关…

ES7 -- ES13

1. ES7 – 2016 1. 数组的includes方法 数组中是否包含某个元素,返回值为boolean let arr [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]; arr.includes(5); // true2. ** 幂次方 let res 2 ** 3; // 82. ES8 --2017 1. 字符串补全 基本使用 let str 123;str.padStart…

Django 请求配置

http请求配置 请求流程 urls.py配置 from first_app import viewsurlpatterns [path(admin/, admin.site.urls),path(test/,views.first_test), ] views.py配置 from django.shortcuts import render,HttpResponse# Create your views here. def first_test(request):prin…

Kubernetes 安装网络插件flannel报错Init:ImagePullBackOff,flannel下载镜像报错问题解决

Kubernetes1.28安装网络插件flannel,报错Init:ImagePullBackOff ,flannel安装下载镜像失败 问题 1.安装flannel kubectl apply -f https://github.com/flannel-io/flannel/releases/latest/download/kube-flannel.yml 2.flannel报错信息 执行查看安装…

Flutter 约束布局

配置插件依赖 设置组件大小 通过属性 childConstraints 实现 分别设置 约束布局一 和 约束布局二 大大小为:160 和 200 点击查看代码文件 class SummaryPageState extends State<SummaryPage1> {ConstraintId constraintId_1 = ConstraintId(ConstraintId_1);Constrain…

【GUI设计】基于Matlab的图像处理GUI系统(1),用matlab实现

博主简介&#xff1a;matlab图像代码项目合作&#xff08;扣扣&#xff1a;3249726188&#xff09; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 本次案例是基于Matlab的图像处理GUI系统&#xff0c;用matlab实现。 本次内容主要分为两部分&a…

专题七_分治_快排_归并_算法专题详细总结

目录 分治 一、分治思想的概念 二、分治思想的步骤 1. 颜⾊分类&#xff08;medium&#xff09; 解析&#xff1a; 2. 快速排序&#xff08;medium&#xff09; 解析&#xff1a; 总结&#xff1a; 3. 快速选择算法&#xff08;medium&#xff09; 解析&#xff1a; …

【BurpSuite】Cross-site scripting (XSS 学徒部分:1-9)

&#x1f3d8;️个人主页&#xff1a; 点燃银河尽头的篝火(●’◡’●) 如果文章有帮到你的话记得点赞&#x1f44d;收藏&#x1f497;支持一下哦 【BurpSuite】Cross-site scripting (XSS 学徒部分:1-9&#xff09; 实验一 Lab: Reflected XSS into HTML context with nothing…

maven手动导入本地仓库

maven手动导入本地仓库 1.在maven仓库下载对应的依赖 一定要把jar包下载到maven仓库的bin下 2.找到自己仓库的maven仓库下的bin目录cmd进去 在cmd窗口中输入以下命令&#xff1a;&#xff08;这里根据你的groupId、artifactId、version修改即可&#xff09; <!-- https:…

乱弹篇(53)丹桂未飘香

今天是2024年“秋分”节气&#xff0c;也是第7个中国“农民丰收节”&#xff0c;本“人民体验官”推广人民日报官方微博文化产品《文化中国行看丰收之美》。 截图&#xff1a;来源“人民体验官”推广平台 人民微博说&#xff1a;“春华秋实&#xff0c;岁物丰成。”又说&#…

dhtmlxGantt 甘特图 一行展示多条任务类型

效果如图: 后台拿到数据 处理之后如图: 含义: 如上图所示, 如果一行需要展示多个 需要给父数据的那条添加render:split属性, 子数据的parent为父数据的Id即可 切记 父数据的id 别为0 为0 时 会出现错乱 因为有些小伙伴提出分段展示的数据结构还是有点问题,下面展示一个完整…

机器人时代的“触觉革命”:一块小传感器如何颠覆你的认知?

你是否曾经想过,机器人也能像人类一样有“触觉”?不再是简单的机械操作,而是具备真正的感知能力,能够学会精细的任务。今天我想和你聊聊一种让机器人“长出触觉”的技术:一种小巧的触觉传感器,它的名字叫“AnySkin”。别看它小,它的潜力可一点都不小,或许能彻底改变我们…

Windows下如何定时执行自定义任务

目录 一.前言二.设置定时自动执行自定义任务 一.前言 本文环境是Windows11系统。 有时候我们希望能够在Windows下定时自动执行自定义任务&#xff0c;比如检测数据库服务的状态。那在Windows下怎么定时自动执行自定义任务&#xff0c;这篇文章介绍一种方法。 二.设置定时自动…

NLP 主流应用方向

主流应用 文本分类文本匹配序列标注生成式任务 应用细分 文本纠错话者分离 本质为文本分类任务数字归一化 实现数字映射&#xff0c;提高内容可读性 如将一九九九转1999

AI基础 L26 Introduction to Automated Planning - II

ADL Action Description Language (ADL) is a richer language than STRIPS. It allows for • Positive and negative literals in states • The open world assumption • Quantified variables in goals as well as conjunctions and disjunctions • Conditional effects …