3、TENSOR VIEWS

2024-08-26 23:48
文章标签 tensor views

本文主要是介绍3、TENSOR VIEWS,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

PyTorch 允许张量是现有张量的视图。视图张量与其基础张量共享相同的基础数据。 支持 View 避免了显式数据复制,从而使我们能够进行快速且内存高效的整形、切片和元素操作。

例如,要获取现有张量 t 的视图,可以调用 t.view(...)。

>>> t = torch.rand(4, 4)
>>> b = t.view(2, 8)
>>> t.storage().data_ptr() == b.storage().data_ptr()  # `t` and `b` share the same underlying data.
True
# Modifying view tensor changes base tensor as well.
>>> b[0][0] = 3.14
>>> t[0][0]
tensor(3.14)

由于视图与其基本张量共享基础数据,如果您在视图中编辑数据,它也会反映在基本张量中。

通常,PyTorch 操作会返回一个新的张量作为输出,例如 add()。但是在视图操作的情况下,输出是输入张量的视图,以避免不必要的数据复制。创建视图时不会发生数据移动,视图张量只是改变了它解释相同数据的方式。考虑连续张量可能会产生不连续的张量。用户应特别注意,因为连续性可能会对性能产生隐含的影响。 transpose() 是一个常见的例子。

>>> base = torch.tensor([[0, 1],[2, 3]])
>>> base.is_contiguous()
True
>>> t = base.transpose(0, 1)  # `t` is a view of `base`. No data movement happened here.
# View tensors might be non-contiguous.
>>> t.is_contiguous()
False
# To get a contiguous tensor, call `.contiguous()` to enforce
# copying data when `t` is not contiguous.
>>> c = t.contiguous()

作为参考,以下是 PyTorch 中视图操作的完整列表:

基本切片和索引操作,例如 tensor[0, 2:, 1:7:2] 返回基本张量的视图,请参见下面的注释。

  • as_strided()

  • detach()

  • diagonal()

  • expand()

  • expand_as()

  • movedim()

  • narrow()

  • permute()

  • select()

  • squeeze()

  • transpose()

  • t()

  • T

  • real

  • imag

  • view_as_real()

  • view_as_imag()

  • unflatten()

  • unfold()

  • unsqueeze()

  • view()

  • view_as()

  • unbind()

  • split()

  • split_with_sizes()

  • swapaxes()

  • swapdims()

  • chunk()

  • indices() (sparse tensor only)

  • values() (sparse tensor only)

当通过索引访问张量的内容时,PyTorch 遵循 Numpy 行为,即基本索引返回视图,而高级索引返回副本。 通过基本或高级索引进行分配是就地的。 在 Numpy 索引文档中查看更多示例。

还值得一提的是一些具有特殊行为的操作:

1、reshape()、reshape_as() 和 flatten() 可以返回视图或新张量,用户代码不应依赖于它是否为视图。

2、如果输入张量已经是连续的,则 contiguous() 返回自身,否则它通过复制数据返回一个新的连续张量。

有关 PyTorch 内部实现的更详细演练,请参阅 ezyang 关于 PyTorch 内部实现的博文。

这篇关于3、TENSOR VIEWS的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1110031

相关文章

Mindspore 初学教程 - 3. Tensor 张量

张量(Tensor)是一个可用来表示在一些矢量、标量和其他张量之间的线性关系的多线性函数,这些线性关系的基本例子有内积、外积、线性映射以及笛卡儿积。其坐标在  n n n 维空间内,有  n r n^{r} nr 个分量的一种量,其中每个分量都是坐标的函数,而在坐标变换时,这些分量也依照某些规则作线性变换。 r r r 称为该张量的秩或阶(与矩阵的秩和阶均无关系)。 张量是一种特殊的数据结构,

若依部署后出现Error: Cannot find module ‘@/views/xxx‘问题,本地没有问题(解决办法)

若依部署后出现Error: Cannot find module ‘@/views/xxx‘问题,本地没有问题 文章目录 若依部署后出现Error: Cannot find module ‘@/views/xxx‘问题,本地没有问题一、问题描述1️⃣:描述2️⃣:原因 二、解决办法1.permission.js2.router/index.js三、打包测试 一、问题描述

七. 部署YOLOv8检测器-load-save-tensor

目录 前言0. 简述1. 案例运行2. 补充说明3. 代码分析3.1 main.cpp3.2 create_data.py 结语下载链接参考 前言 自动驾驶之心推出的 《CUDA与TensorRT部署实战课程》,链接。记录下个人学习笔记,仅供自己参考 本次课程我们来学习课程第六章—部署分类器,一起来学习利用 cnpy 库加载和保存 tensor 课程大纲可以看下面的思维导图

Pytorch:Tensor基本运算【add/sub/mul/div:加减乘除】【mm/matmul:矩阵相乘】【Pow/Sqrt/rsqrt:次方】【近似:floor...】【裁剪:clamp】

一、基本运算:加减乘除 1、乘法 1.1 a * b:element-wise 对应元素相乘 a * b:要求两个矩阵维度完全一致,即两个矩阵对应元素相乘,输出的维度也和原矩阵维度相同 1.2 torch.mul(a, b):element-wise 对应元素相乘 torch.mul(a, b):是矩阵a和b对应位相乘,a和b的维度必须相等,比如a的维度是(1, 2),b的维度是(1,

Pytorch:Tensor的高阶操作【where(按条件取元素)、gather(查表取元素)、scatter_(查表取元素)】【可并行计算,提高速度】

一、where:逐个元素按条件选取【并行计算,速度快】 torch.where(condition,x,y) #condition必须是tensor类型 condition的维度和x,y一致,用1和0分别表示该位置的取值 import torchcond = torch.tensor([[0.6, 0.7],[0.3, 0.6]])a = torch.tensor([[1., 1.],[

Pytorch:Tensor数组运算中的Broadcasting【广播机制】

简单来说,Broadcasting 可以这样理解:如果你有一个 m × n m×n m×n 的矩阵,让它加减乘除一个 1 × n 1×n 1×n 的矩阵,它会被复制 m m m 次,成为一个 m × n m×n m×n 的矩阵,然后再逐元素地进行加减乘除操作。 数组在进行矢量化运算时,要求数组的形状是相等的。当形状不相等的数组执行算术运算的时候,就会出现广播机制,该机制会对数组进行扩

tensorflow:超简单易懂 tensor list的使用 张量数组的使用 扩增 建立 append

构造张量数组: 最简单的方式: tensor_list=[tensor1,tensor2] 常用的方式(这个方式可以用于for循环) tensor_list=[]tensor_list.append(tensor1)tensor_list.append(tensor2) 张量数组的使用 批量处理张量数组里面的张量,之后将其存储到一个新的张量数组中 new_tensor_list

EXO:模型最终验证的地方;infer_tensor;step;MLXDynamicShardInferenceEngine

目录 EXO:模型最终验证的地方 EXO:infer_tensor  EXO:step  MXNet的 mx.array 类型是什么 NDArray优化了什么 1. 异步计算和内存优化 2. 高效的数学和线性代数运算 3. 稀疏数据支持 4. 自动化求导 举例说明 EXO:模型最终验证的地方 EXO:infer_tensor  这段代码定义了一个名为 in

Eigen::Tensor使用,定义高维矩阵

在实际项目中,需要存储大于等于三维的矩阵,而平常中我们使用Eigen::MatrixXd二维数据,这里我们使用Eigen::Tensor来定义 1.Using the Tensor module #include <unsupported/Eigen/CXX11/Tensor> 2.定义矩阵 2.一般矩阵 官方文档 // 定义一个2x3x4大小的矩阵Eigen::Tensor<f

tensor core实现矩阵乘法的详细解读

之前关于tensor core的介绍可以参考链接添加链接描述 基础的tensor core实现C=AB的代码可以参考下面这段内容: 上面代码的几个注意事项: 首先是加载mma.h头文件,这个是包含wmma模板类的头文件。 其次是设置的WMMA_M=16,WMMA_N=16,WMMA_K=8,这三个参数的表示的意思是,对于一个线程块内的一个warp来说,这个线程簇warp一次能处理的是[16,8]