Pytorch基础:Tensor的连续性

news2025/2/25 3:03:43

相关阅读

Pytorch基础icon-default.png?t=N7T8https://blog.csdn.net/weixin_45791458/category_12457644.html?spm=1001.2014.3001.5482


        在Pytorch中,一个连续的张量指的是张量中各数据元素在底层的存储顺序与其在张量中的位置一致。这意味着每一个元素的地址可以通过下面的线性映射公式来确定:

address(i_{0},i_{2},...,i_{n-1}) = base\_address+\sum_{k=0}^{n-1}(i_{k}\cdot stride(k)) 

        其中,i_{0}是第k维的索引,stride(k)是第k维的步长(就是第k维的数据在存储时,相邻数据在底层线性存储时相隔的数据数),base\_address是张量底层数据存储的起始地址。

        对于一个连续的张量,其stride应该符合从最内层维度(第0维度)到最外层维度递减的模式。更准确地说,如果一个张量有n个维度,并且每个维度的大小是s_{0},s_{2},...,s_{n-1},那么其连续性可以使用下面的方式判定:

stride(n-1)=1

 stride(k)=stride(k+1)\times s_{k+1} \ for\ k = n-2,n-1,...,0

        当你创建一个新的张量时,默认情况下,它是连续的,这意味着它的元素在内存中是按照顺序存储的。可以通过size()方法和stride()方法获得一个张量的形状和步长,利用公式判断是否连续;也可以使用storage()方法,直接获得一个张量在底层的线性存储结果;最方便的是使用.is_contiguous()方法,他会直接返回一个布尔值。

import torch

x = torch.tensor([[1, 2], [3, 4]])
print(list(x.size()))
print(x.stride())
print(x.storage())
print("Is x contiguous?", x.is_contiguous()) 

输出:
[2, 2]
(2, 1)
 1
 2
 3
 4
[torch.LongStorage of size 4]
Is x contiguous? True

        为什么会出现非连续张量呢?在PyTorch中,非连续张量的出现往往与张量视图(tensor views)的概念密切相关。张量视图允许一个新张量作为原张量的视图存在,其中新张量与其原张量共享相同的底层数据。这种设计旨在避免显式的数据复制,从而实现快速且内存高效的操作(例如切片、转置)。

        既然两个不同的张量共享底层存储,如果其中一个张量是连续的,另一个必然是不连续的,

import torch

x = torch.tensor([[1, 2], [3, 4]])
print(list(x.size()))
print(x.stride())
print(x.storage())
print("Is x contiguous?", x.is_contiguous()) 

y = x.t()
print(list(y.size()))
print(y.stride())
print(y.storage())
print("Is y contiguous?", y.is_contiguous())

输出:
[2, 2]
(2, 1)
 1
 2
 3
 4
[torch.LongStorage of size 4]
Is x contiguous? True
[2, 2]
(1, 2)
 1
 2
 3
 4
[torch.LongStorage of size 4]
Is y contiguous? False

        除了t(),Pytorch中有下面这些会返回视图的操作(因此可能出现非连续张量)。

基本的切片和索引, 例如tensor[0, 2:, 1:7:2]
adjoint()
as_strided()
detach()
diagonal()
expand()
expand_as()
movedim()
narrow()
permute()
select()
squeeze()
transpose()
t()
T
H
mT
mH
real
imag
view_as_real()
unflatten()
unfold()
unsqueeze()
view()
view_as()
unbind()
split()
hsplit()
vsplit()
tensor_split()
split_with_sizes()
swapaxes()
swapdims()
chunk()
indices() (仅限稀疏张量)
values() (仅限稀疏张量)

        除此之外,reshape(),reshape_as()和flatten() 既有可能返回张量的视图,也可能返回一个拥有独立存储空间的新张量。这取决于一些特定的条件,具体可见关于这些操作的文章。

Pytorch基础:Tensor的reshape方法_pytorch reshape-CSDN博客icon-default.png?t=N7T8https://chenzhang.blog.csdn.net/article/details/133445832Pytorch基础:Tensor的flatten方法_tensor.flatten-CSDN博客icon-default.png?t=N7T8https://chenzhang.blog.csdn.net/article/details/136570774        最后值得一提的是,contiguous()方法能返回一个连续的张量,如果原张量已连续,则会返回原张量。

import torch

x = torch.tensor([[1, 2], [3, 4]])
print(list(x.size()))
print(x.stride())
print(x.storage())
print("Is x contiguous?", x.is_contiguous())

y = x.t()

z = y.contiguous()
print(list(z.size()))
print(z.stride())
print(z.storage())
print("Is z contiguous?", z.is_contiguous())


输出:
[2, 2]
(2, 1)
 1
 2
 3
 4
[torch.LongStorage of size 4]
Is x contiguous? True
[2, 2]
(2, 1)
 1
 3
 2
 4
[torch.LongStorage of size 4]
Is z contiguous? True

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

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

相关文章

MySQL8--用户与权限管理

原文网址:MySQL8--用户与权限管理_IT利刃出鞘的博客-CSDN博客 简介 说明 本文介绍MySQL8的用户与权限的管理,包括:用户的创建与删除、授权与撤销权限等。 为什么要管理用户与权限? 目的是保证数据库的安全性,只授…

TCP/IP协议——使用Socket套接字实现

目录 Socket 使用Socket实现TCP客户端和服务器的过程 使用Socket搭建TCP服务器 线程优化 向客户端发送消息 连接的断开 客户端主动断开 服务端主动断开 服务器完整的程序 使用Socket编写客户端程序连接TCP服务器 Socket Socket是一种网络通信协议,它允许…

不再担心数据丢失:用rsync打造你的自动化备份解决方案

在现代IT环境中,数据备份是一项至关重要的任务。无论是个人文件还是企业数据,都需要有可靠的备份机制来防止数据丢失。今天,我们将介绍一种高效的备份方案:使用rsync实现自动化备份目录。 什么是rsync? rsync 是一个开…

vscode+cmake+msvc+vcpkg的入门使用

一.环境安装 1.下载vscode并安装: Download Visual Studio Code - Mac, Linux, Windows 2.安装完成后,安装C和cmake 相关工具,如图。 3.vcpkg的下载和安装 克隆vcpkg的仓库到本地:https://github.com/microsoft/vcpkg.git,运行bo…

《学会 SpringMVC 系列 · 基础篇》

📢 大家好,我是 【战神刘玉栋】,有10多年的研发经验,致力于前后端技术栈的知识沉淀和传播。 💗 🌻 CSDN入驻不久,希望大家多多支持,后续会继续提升文章质量,绝不滥竽充数…

deeplapv3 动机

语义分割是计算机视觉领域中重要的任务之一,语义分割的目的是为图像中的每个像素分配标签。相比于传统方法,以深度学习为基础的全卷积网络极大地提高了语义分割算法的性能。 在语义分割网络中,常用到如下2种结构: 空间金字塔池化…

C++STL简介(三)

目录 1.vector的模拟实现 1.1begin() 1.2end() 1.3打印信息 1.4 reserve() 1.5 size() 1.6 capacity() 1.7 push_back() 1.8[ ] 1.9 pop_back() 1.10 insert&…

【涵子来信】——AI革新:1.新时代是便捷的,要会用

各位读者朋友们: 我们现在AI时代的十字路口,AI是为生活带来便利的,我们要会使用AI。今天这篇文章来讲述一下AI的正确使用。 一、 AI的使用 1.1.便捷之中要会辨别 AI是带来强大的,利用好可以给生活带来便捷。 像之前WWDC24宣传…

SAP 字符串关键字找程序

关键字查询程序 : RPR_ABAP_SOURCE_SCAN或RS_ABAP_SOURCE_SCAN

Python网络爬虫:基础与实战!附淘宝抢购源码

Python网络爬虫是一个强大的工具,用于从互联网上自动抓取和提取数据。下面我将为你概述Python网络爬虫的基础知识和一些实战技巧。 Python网络爬虫基础 1. HTTP请求与响应 网络爬虫的核心是发送HTTP请求到目标网站并接收响应。Python中的requests库是处理HTTP请求…

C语言——运算符及表达式

C语言——运算符及表达式 运算符运算符的分类(自增运算符)、--(自减运算符)赋值运算符逗号运算符(顺序求值运算符) 表达式 运算符 运算符的分类 C语言的运算符范围很宽,除了控制语句和输入输出…

从数据血缘谈一谈如何实现数据管理的“自治理”

数据治理是企业数据管理的核心,它通过系统性的管理行为,确保数据的完整性、准确性、安全性、合规性和价值最大化。数据治理有助于提高数据质量和可用性,减少数据管理的风险,增强企业对数据的信任,从而提升业务效率和竞…

mongodb中ret resulted in status UnknownError: 24: Too many open files

mongodb使用中遇到的问题 Invariant failure: ret resulted in status UnknownError:24:Too many open files at *** 错误原因为打开文件过多的错误,即“句柄数超出系统显示”。 1.需要更改一下系统的句柄数: 查看一下系统目前设置的句柄数 open files 对…

算法刷题day2|贪心:122. 买卖股票的最佳时机 II、55. 跳跃游戏、45. 跳跃游戏 II、1005. K 次取反后最大化的数组和

122. 买卖股票的最佳时机 II 贪心一 画出股票的折线图&#xff0c;将图中折线上升区间相加即是最大利润。 class Solution { public:int maxProfit(vector<int>& prices) {int result 0;for (int i 1; i < prices.size(); i){//下降区间直接跳过if (prices[i]…

创建完整的APP页面

完整的页面创建过程包括三个步骤 在layout目录下创建XML文件 创建与XML文件对应的Java代码 在AndroidMainfest.xml&#xff08;清单文件&#xff09;中注册页面配 一步到位的activity创建 跳转&#xff1a;意图 创建一个意图实例&#xff0c;使用setClass&#xff08;&#…

python机器学习12--Regression回归分析

1.数据准备 第一步&#xff1a;数据内容一定要有以下两种值域的因果数据。  特征&#xff08;Feature&#xff09;&#xff1a;因&#xff0c;在统计学称为自变量&#xff08;Independent Variable&#xff09;。  标签答案&#xff08;Label&#xff09;&#xff1a;果&a…

4条社交规则,让你受益

一个人只要在社会生活中&#xff0c;那他就免不了社会交往。 有时候&#xff0c;我们在社交中之所以不受欢迎&#xff0c;主要还是因为方法和策略的问题&#xff0c;也就是说缺乏对社交的深入思考&#xff0c;没有去做正确的事情。要知道&#xff0c;只要思路和方向对了&#…

【计算机毕设论文】基于SpringBoot的语音识别系统的设计与实现

&#x1f497;博主介绍&#xff1a;✌全平台粉丝5W,高级大厂开发程序员&#x1f603;&#xff0c;博客之星、掘金/知乎/华为云/阿里云等平台优质作者。 【源码获取】关注并且私信我 感兴趣的可以先收藏起来&#xff0c;同学门有不懂的毕设选题&#xff0c;项目以及论文编写等相…

传统制造业物流管理有什么缺陷?智能供应链技术推动制造业转型!

在科技迅猛发展的今天&#xff0c;智能制造已成为推动工业转型和升级的关键力量。作为智能制造的重要组成部分&#xff0c;物流管理的智能化不仅关系到企业运营的效率&#xff0c;更直接影响到整个制造业的竞争力。随着中国社会物流总额的持续攀升&#xff0c;物流行业展现出了…