深度学习Pytorch-Tensor的属性、算术运算

深度学习Pytorch-Tensor的属性、算术运算

  • Tensor的属性
  • Tensor的算术运算
  • Pytorch中的in-place操作
  • Pytorch中的广播机制
  • Tensor的取整/取余运算
  • Tensor的比较运算
  • Tensor的取前k个大/前k小/第k小的数值及其索引
  • Tensor判定是否为finite/inf/nan

Tensor的属性

每一个Tensor对象都有以下几个属性:torch.dtype、torch.device和torch.layout

1、torch.dtype属性标识了torch.Tensor的数据类型。

2、torch.device属性标识了torch.Tensor对象在创建之后所存储在的设备名称。
torch.device包含了两种设备类型 (‘cpu’ 或者 ‘cuda’) ,分别标识将Tensor对象储存于cpu内存或者gpu内存中,同时支持指定设备编号,比如多张gpu,可以通过gpu编号指定某一块gpu。 如果没有指定设备编号,则默认将对象存储于current_device()当前设备中;
举个例子, 一个torch.Tensor对象构造函数中的设备字段如果填写’cuda’,那等价于填写了’cuda:X’,其中X是函数 torch.cuda.current_device()的返回值。在torch.Tensor对象创建之后,可以通过访问torch.device属性实时访问当前对象所存储在的设备名称。构造torch.device可以通过字符串/字符串和设备编号。

3、torch.layout属性标识了torch.Tensor在内存中的布局模式。
现在, 我们支持了两种内存布局模式 torch.strided (dense Tensors) 和尚处试验阶段的torch.sparse_coo (sparse COO Tensors, 一种经典的稀疏矩阵存储方式)。
torch.strided 跨步存储代表了密集张量的存储布局方式,当然也是最常用最经典的一种布局方式。 每一个strided tensor都有一个与之相连的torch.Storage对象, 这个对象存储着tensor的数据。这些Storage对象为tensor提供了一种多维的, 跨步的(strided)数据视图。这一视图中的strides是一个interger整形列表:这个列表的主要作用是给出当前张量的各个维度的所占内存大小,严格的定义就是,strides中的第k个元素代表了在第k维度下,从一个元素跳转到下一个元素所需要跨越的内存大小。 跨步这个概念有助于提高多种张量运算的效率。

Tensor创建实例:

import torch
a = torch.Tensor([[1, 2],[3, 4]])#定义一个2*2的张量,数值为1,2,3,4
print(a)
Out[]: 
tensor([[1., 2.],[3., 4.]])b = torch.Tensor(2, 2)#制定形状2*2
print(b)
Out[]: 
tensor([[6.2106e-42, 0.0000e+00],[       nan,        nan]])

稀疏张量实例:

i = torch.tensor([[0, 1, 2], [0, 1, 2]])#非0元素的坐标(0,0)(1,1)(2,2)
v = torch.tensor([1, 2, 3])#非0元素具体的值对应上述坐标
a = torch.sparse_coo_tensor(i, v, (4, 4),dtype=torch.float32,device=dev)
print(a)
Out[]: 
tensor(indices=tensor([[0, 1, 2],[0, 1, 2]]),values=tensor([1., 2., 3.]),size=(4, 4), nnz=3, layout=torch.sparse_coo)
#转变为稠密张量
i = torch.tensor([[0, 1, 2], [0, 1, 2]])#非0元素的坐标(0,0)(1,1)(2,2)
v = torch.tensor([1, 2, 3])#非0元素具体的值对应上述坐标
a = torch.sparse_coo_tensor(i, v, (4, 4),dtype=torch.float32,device=dev).to_dense()#大小4*4
print(a)
Out[]: 
tensor([[1., 0., 0., 0.],[0., 2., 0., 0.],[0., 0., 3., 0.],[0., 0., 0., 0.]])

Tensor的算术运算

  • 哈达玛积(element wise,对应元素相乘)
  • 二维矩阵乘法运算操作包括torch.mm()、torch.matmul()、@
  • 对于高维的Tensor(dim>2),定义其矩阵乘法仅在最后的两个维度上,要求前面的维度必须保持一致,就像矩阵的索引一样并且运算操作只有torch.matmul()

算术运算实例:add加法、sub减法、mul哈达玛积(乘法)、div除法

import torch
a = torch.rand(2, 3)
b = torch.rand(2, 3)
print(a)
print(b)
print(a + b)
print(a.add(b))
print(torch.add(a, b))
print(a)
print(a.add_(b))#其中,前三种一样,第四种是对 a 进行了修改。
print(a)

在这里插入图片描述

矩阵运算

##matmul
a = torch.ones(2, 1)#形状
b = torch.ones(1, 2)
print(a @ b)
print(a.matmul(b))
print(torch.matmul(a, b))
print(torch.mm(a, b))
print(a.mm(b))##高维tensor
a = torch.ones(1, 2, 3, 4)
b = torch.ones(1, 2, 4, 3)
print(a.matmul(b).shape)
out[]:
torch.Size([1, 2, 3, 3])

幂运算pow、指数运算exp、对数运算log、开根号sqrt

a = torch.tensor([1, 2])#数值
print(torch.pow(a, 3))
print(a.pow(3))
print(a**3)
print(a.pow_(3))
print(a)

在这里插入图片描述

Pytorch中的in-place操作

  • “就地”操作,即不允许使用临时变量。
  • 也称为原味操作。
  • x=x+y
  • add_、sub_、mul_等等

Pytorch中的广播机制

  • 广播机制:张量参数可以自动扩展为相同大小
  • 广播机制需要满足两个条件:

1.每个张量至少有一个维度
2.满足右对齐
A.ndim == B.ndim, 并且A.shape和B.shape对应位置的元素要么相同要么其中一个是1

import torch
a = torch.rand(2, 2)
b = torch.rand(1, 2)
# a, 2*1
# b, 1*2
# c, 2*2
# a = torch.rand(2, 1, 1, 3)
# b = torch.rand(4, 2, 3)
# 2*4*2*3
c = a + b
print(a)
print(b)
print(c)
print(c.shape)

在这里插入图片描述

Tensor的取整/取余运算

.floor()向下取整数
.ceil()向上取整数
.round()四舍五入>=0.5向上取整,<0.5向下取整
.trunc()裁剪,只取整数部分
.frac()只取小数部分
%取余
torch.fmod(a, b)除数除以元素的余数;torch.remainder(a, b)张量a每个元素的除法余数

Tensor的比较运算

torch.eq(input,other,out=None) #按成员进行等式操作,相同返回True→Tensor
torch.equal(tensor1,tensor2) #如果tensor1和tensor2有相同的size和elements,则为True→ bool
torch.ge(input,other,out=None) #input>=other,逐个元素比较输入张量input是否大于或等于另外的张量或浮点数other。若大于或等于则返回为True,否则返回False。若张量other无法自动扩展成与输入张量input相同尺寸,则返回为False。→Tensor
torch.gt(input,other,out=None) #input>other→Tensor
torch.le(input,other,out=None) #input<=other→Tensor
torch.lt(input,other,out=None) #input<other→Tensor
torch.ne(input,other,out=None) #input!=other不等于→Tensor

Tensor的取前k个大/前k小/第k小的数值及其索引

torch.sort(input,dim=None,descending=False,out=None)#对目标input进行排序;**维度,对于二维数据:dim=0 按列排序,dim=1 按行排序,默认 dim=1**
torch.topk(input,k,dim=None,largest=True,sorted=True,out=None)#沿着指定维度返回最大k个数值及其索引值
torch.kthvalue(input,k,dim=None,out=None)#沿着指定维度返回第k个最小值及其索引值
##topk,k和维度dim
a = torch.tensor([[2, 4, 3, 1, 5],[2, 3, 5, 1, 4]])
print(a.shape)print(torch.topk(a, k=1, dim=1, largest=False))##topk
a = torch.tensor([[2, 4, 3, 1, 5],[2, 3, 5, 1, 4]])
print(a.shape)print(torch.topk(a, k=2, dim=0, largest=False))

print(torch.kthvalue(a, k=2, dim=0))
print(torch.kthvalue(a, k=2, dim=1))

在这里插入图片描述

Tensor判定是否为finite/inf/nan

  • torch.isfinite(tensor)/torch.isinf(tensor)/torch.isnan(tensor)
  • 返回一个标记元素是否为finite/inf/nan的mask张量(有界,无界,nan)

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【强化学习】Actor-Critic算法

最近读论文看到了强化学习中的Actor-Critic算法。因此了解一下这方面的知识&#xff0c;并记录下来&#xff0c;以防忘记。文章中部分内容也借鉴了其他优秀的博主。 文章目录 一、简介二、策略梯度法&#xff08;Policy Gradient&#xff09;三、Q-Learning四、Actor-Critic 算…

【c语言】运算符汇总(万字解析)

&#x1f31f;&#x1f31f;作者主页&#xff1a;ephemerals__ &#x1f31f;&#x1f31f;所属专栏&#xff1a;C语言 目录 前言 一、c语言运算符的分类 二、各运算符的功能及使用 1. 算数运算符 - * / % 2. 位运算符 二进制和进制转换 二进制转十进制 十进制…

【Spring】Cookie与Session

&#x1f490;个人主页&#xff1a;初晴~ &#x1f4da;相关专栏&#xff1a;计算机网络那些事 一、Cookie是什么&#xff1f; Cookie的存在主要是为了解决HTTP协议的无状态性问题&#xff0c;即协议本身无法记住用户之前的操作。 "⽆状态" 的含义指的是: 默认情况…

c++习题36-奇数单增序列

目录 一&#xff0c;题目 二&#xff0c;思路 三&#xff0c;代码 一&#xff0c;题目 给定一个长度为N&#xff08;不大于500&#xff09;的正整数序列&#xff0c;请将其中的所有奇数取出&#xff0c;并按升序输出。 输入描述 第1行为 N&#xff1b; 第2行为 N 个正整…

java中Scanner的nextLine和next方法

思考&#xff0c;输入1 2 3 4 5加上enter&#xff0c;输出什么 import java.util.Scanner;public class Main {public static void main(String[] args) {Scanner sc new Scanner(System.in);int[][] m new int[2][2];for (int i 0; i < 2; i) {for (int j 0; j < 2;…

Spring Boot技术中小企业设备管理系统设计与实践

6系统测试 6.1概念和意义 测试的定义&#xff1a;程序测试是为了发现错误而执行程序的过程。测试(Testing)的任务与目的可以描述为&#xff1a; 目的&#xff1a;发现程序的错误&#xff1b; 任务&#xff1a;通过在计算机上执行程序&#xff0c;暴露程序中潜在的错误。 另一个…

重学SpringBoot3-怎样优雅停机

更多SpringBoot3内容请关注我的专栏&#xff1a;《SpringBoot3》 期待您的点赞&#x1f44d;收藏⭐评论✍ 重学SpringBoot3-怎样优雅停机 1. 什么是优雅停机&#xff1f;2. Spring Boot 3 优雅停机的配置3. Tomcat 和 Reactor Netty 的优雅停机机制3.1 Tomcat 优雅停机3.2 Reac…

使用 Kafka 和 MinIO 实现人工智能数据工作流

MinIO Enterprise Object Store 是用于创建和执行复杂数据工作流的基础组件。此事件驱动功能的核心是使用 Kafka 的 MinIO 存储桶通知。MinIO Enterprise Object Store 为所有 HTTP 请求&#xff08;如 PUT、POST、COPY、DELETE、GET、HEAD 和 CompleteMultipartUpload&#xf…

fpga系列 HDL: 竞争和冒险 02

竞争和冒险 在 Verilog 设计中&#xff0c;竞争&#xff08;race conditions&#xff09;和冒险&#xff08;hazards&#xff09;是数字电路设计中不期望出现的现象&#xff0c;它们会影响电路的正确性。了解并解决竞争和冒险问题对于确保电路稳定运行非常重要。 竞争&#x…

尚硅谷-react教程-求和案例-数据共享(下篇)-完成数据共享-笔记

#1024程序员节&#xff5c;征文# public/index.html <!DOCTYPE html> <html><head><meta charset"UTF-8"><title>redux</title></head><body><div id"root"></div></body> </html&…

MobileNetv2网络详解

背景&#xff1a; MobileNet v1中DW卷积在训练完之后部分卷积核会废掉&#xff0c;大部分参数为“0” MobileNet v2网络是由Google团队在2018年提出的&#xff0c;相比于MobileNet v1网络&#xff0c;准确率更高&#xff0c;模型更小 网络亮点&#xff1a; Inverted Residu…

力扣题86~90

题86&#xff08;中等&#xff09;&#xff1a; python代码 # Definition for singly-linked list. # class ListNode: # def __init__(self, val0, nextNone): # self.val val # self.next next class Solution:def partition(self, head: Optional[Li…

(史上超级清晰带图解)红黑树的实现--C++

文章目录 一、红黑树的概念1、红黑树的规则&#xff1a;2、那红黑树如何确保最长路径不超过最短路径的2倍的&#xff1f;3、红黑树的效率&#xff1a; 二、红黑树的实现1、红黑树的结构2、红黑树的插入2.1、红黑树树插入一个值的大概过程2.2、情况1&#xff1a;变色2.3、情况2&…

大模型低资源部署策略

文章目录 解码效率分析大模型训练后量化方法经验性分析与相关结论由于大模型的参数量巨大,在解码阶段需要占用大量的显存资源,因而在实际应用中的部署代价非常高。在本文中,我们将介绍一种常用的模型压缩方法,即模型量化(ModelQuantization),来减少大模型的显存占用,从…

基于spootboot学生选课系统设计与实现

资料下载 https://download.csdn.net/download/qq_63753925/89888794 https://download.csdn.net/download/qq_63753925/89888793 https://download.csdn.net/download/qq_63753925/89885091 https://download.csdn.net/download/qq_63753925/89882320 摘 要 近年来&#xf…

25届电信保研经验贴(自动化所)

个人背景 学校&#xff1a;中九 专业&#xff1a;电子信息工程 加权&#xff1a;92.89 绩点&#xff1a;3.91/4.0 rank&#xff1a;前五学期rank2/95&#xff0c;综合排名rank1&#xff08;前六学期和综合排名出的晚&#xff0c;实际上只用到了前五学期&#xff09; 科研…

Gateway 统一网关

一、初识 Gateway 1. 为什么需要网关 我们所有的服务可以让任何请求访问&#xff0c;但有些业务不是对外公开的&#xff0c;这就需要用网关来统一替我们筛选请求&#xff0c;它就像是房间的一道门&#xff0c;想进入房间就必须经过门。而请求想要访问微服务&#xff0c;就必须…

STM32主从定时器输出个数、频率可调的脉冲

STM32中发出脉冲一般有两种方式&#xff1a; 1&#xff09;利用定时中断输出脉冲&#xff0c;但是间隔的延时会影响其他主程序的进程&#xff0c;当控制多个电机的时候就非常不可取&#xff1b; 2&#xff09;利用PWM脉宽调制&#xff0c;并通过主从定时器进行设定&#xff0…

微知-Lecroy力科的PCIe协议分析仪型号命名规则(PCIe代,金手指lanes数量)

文章目录 要点主要型号命名规则各代主要产品图片Summit M616 协议分析仪/训练器Summit T516 分析仪Summit T416 分析仪Summit T3-16分析仪Summit T28 分析仪 综述 要点 LeCroy(力科)成立于1964年&#xff0c;是一家专业生产示波器厂家。在美国纽约。一直把重点放在研制改善生产…

安卓14上蓝牙调用SystemProperties.set(),解决找不到SystemProperties.set()的问题

近期遇到一个需求&#xff0c;要在安卓14的蓝牙模块中调用SystemProperties.set()。 安卓14中的蓝牙&#xff0c;和安卓12的版本有较大的不同。它在packages/modules目录下&#xff0c;而安卓12是分散在packages/apps和frameworks/base等目录下&#xff1b;安卓14的蓝牙打包产…