PyTorch張量:內存布局

你可能對 torch 上的某些函數感到困惑,它們執行相同的操作但名稱不同。 例如:?reshape()view()permute()transpose()?等。

這些函數的做法真的不同嗎? 不! 但為了理解它,我們首先需要了解一下張量在 pytorch 中是如何實現的。

NSDT工具推薦:?Three.js AI紋理開發包?-?YOLO合成數據生成器?-?GLTF/GLB在線編輯?-?3D模型格式在線轉換?-?可編程3D場景編輯器?-?REVIT導出3D模型插件?-?3D模型語義搜索引擎

張量(tensor)是抽象或邏輯結構,就像數組一樣,無法按照其設想的方式實現。 顯而易見的原因是內存單元是連續(contiguous)的,因此我們需要找到一種方法將它們保存在內存中。 例如,如果我們有一個如下所示的二維張量(或數組):

將其保存到內存中的正常(或連續)方式是逐行排列。 所以我們將有:

每個張量都有元數據來聲明如何讀取張量。 例如,在這個 2d 張量中,為了訪問下一行,我們必須向前移動 3 步,而下一列我們應該向前移動 1 步。 我們稱這兩個數字為步幅(stride)。 所以我們可以像下面這樣提取它們:

這為我們開辟了新的可能性,因為們可以通過改變步幅元數據來改變張量! 例如,如果我們將步長從(3, 1)?更改為(1, 3),我們實際上轉置了矩陣,而無需對所有內存項進行任何操作:

正如你所注意到的,張量不再連續,因為我們更改了它!為了轉到下一行,我們只需跳過 1 個值,而跳過3 個值則移動到下一列。
如果我們回想一下張量的內存布局,這是有道理的:

[0, 1, 2, 3, 4, …, 11]

為了移動到下一列(例如從0到3,我們必須跳過 3 個值。因此張量不再是連續的!要使其連續,只需對其調用contigously()即可:

當你調用contigious()時,它實際上會創建張量的副本,因此元素的順序將與從頭開始創建相同形狀的張量相同。

請注意,“連續”這個詞有點誤導,因為它并不是張量的內容分布在斷開連接的內存塊周圍。 這里字節仍然分配在一塊內存中,但元素的順序不同!

同樣,視圖函數?view()只是原始變量的視圖,這意味著如果更改原始內存,它也會發生變化:

這實際上非常有效,因為我們不必為轉換創建新的內存槽。 但?reshape()可以復制原始數據。 來自原始文檔:

連續輸入和具有兼容步幅的輸入可以在不復制的情況下進行重塑,但你不應依賴于復制與查看行為。

例如,如果我們有如下代碼:

運行輸出結果如下:

該視圖不適用于非連續數據。

另外,考慮到?permute()?是另一個僅適用于元數據的函數,因此它也會創建不連續的數據。?permute()?改變軸的順序,因此它與改變矩陣形狀的?view()?或?reshape()?完全不同。


原文鏈接:Pytorch張量內存布局 - BimAnt

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/215727.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/215727.shtml
英文地址,請注明出處:http://en.pswp.cn/news/215727.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

1 CPU實現的基本框圖

匯編語言 && 指令格式 CPU設計的框架:三級流水線 ROM存放指令和數據,大端模式&小端模式,地址對齊 取指 譯碼: 執行: 匯編語言 & 指令格式 流水線實現工作機制 模塊功能劃分&接口信號 參考…

Linux中用rpm管理軟件

本章主要介紹使用rpm對軟件包進行管理 使用rpm查詢軟件的信息使用rpm安裝及卸載軟件使用rpm對軟件進行更新使用rpm對軟件進行驗證 rpm 全稱是redhat package manager,后來改成rpm package manager,這是根據源 碼包編譯出來的包。先從光盤中拷貝一個包&…

strict-origin-when-cross-origin

嚴格限制同源策略 (1)允許服務器的同源IP地址訪問 (2)允許Referer --- 后端服務器要配置

linux sed命令刪除一行/多行_sed刪除第一行/linux刪除文件某一行

sed系列文章 linux常用命令(9):sed命令(編輯/替換/刪除文本)linux sed命令刪除一行/多行_sed刪除第一行/linux刪除文件某一行 文章目錄 sed系列文章一、sed刪除某一行內容/刪除最后一行二、sed刪除多行三、擴展3.1、-i命令 本文主要講解如何刪除txt文件中的某一行內…

vite+ts——user.ts——ts接口定義+axios請求的寫法

import axios from axios; import qs from query-string; import {UserState} from /store/modules/user/types;export interface LoginData{username:string;password:string;grant_type?:string;scope?:string;client_id?:string;client_secret?:string;response_type?:…

企業使用APP自動化測試工具的重要因素

隨著移動應用市場的蓬勃發展,企業對高質量、高效率的軟件交付提出了更高的要求。在這個背景下,APP自動化測試工具成為了企業不可或缺的一部分。以下是企業采用APP自動化測試工具的關鍵因素: 1. 快速且可重復的測試執行 自動化測試工具能夠快速…

Docker入門概念

文章目錄 容器(container:容器/集裝箱)技術虛擬機解決了哪些部署問題docker解決了哪些部署問題docker是如何做到容器間運行時環境隔離的docker基本概念docker基本使用 容器(container:容器/集裝箱)技術 容…

奧威亞視頻云平臺VideoCover.aspx 接口任意文件上傳漏洞復現 [附POC]

文章目錄 奧威亞視頻云平臺VideoCover.aspx 接口任意文件上傳漏洞復現 [附POC]0x01 前言0x02 漏洞描述0x03 影響版本0x04 漏洞環境0x05 漏洞復現1.訪問漏洞環境2.構造POC3.復現0x06 修復建議奧威亞視頻云平臺VideoCover.aspx 接口任意文件上傳漏洞復現 [附POC] 0x01 前言 免責…

做數據分析為何要學統計學(5)——什么問題適合使用卡方檢驗?

卡方檢驗作為一種非常著名的非參數檢驗方法(不受總體分布因素的限制),在工程試驗、臨床試驗、社會調查等領域被廣泛應用。但是也正是因為使用的便捷性,造成時常被誤用。本文參閱相關的文獻,對卡方檢驗的適用性進行粗淺…

原來使用代碼也可以畫時序圖,用這個Mermaid就行,真香

本文首發于我的個人掘金博客,看到很多人都比較喜歡這篇文章,分享給大家。 個人博客主頁:https://www.aijavapro.cn 個人掘金主頁:juejin.cn/user/2359988032644541/posts 個人知識星球: 覺醒的新世界程序員 一、背景 在軟件開發和…

spring數據校驗

我是南城余!阿里云開發者平臺專家博士證書獲得者! 歡迎關注我的博客!一同成長! 一名從事運維開發的worker,記錄分享學習。 專注于AI,運維開發,windows Linux 系統領域的分享! 本…

數據庫(一)| 數據庫概述、基本概念、關系型數據庫特點、超鍵候選碼等

文章目錄 1 數據庫的一些基礎概念1.1 數據庫和數據庫管理系統1.2 關系模式和關系實例1.3 數據庫模式和數據庫實例 2 數據庫組織形式2.1 數據采用文件的缺點2.2 使用數據庫管理系統的 優點 3 關系型數據庫特點4 三個層次的數據抽象Data Abstraction5 超鍵、候選碼、主碼、外碼 1…

php之jwt使用

PHP JWT(JSON Web Token)是一種用于身份驗證和授權的開放標準。JWT是一個包含有關用戶或實體身份信息的安全令牌,它由三部分組成:頭部(Header)、載荷(Payload)和簽名(Sig…

計算機網絡編程

網絡編程 Java 是第一大編程語言和開發平臺。它有助于企業降低成本、縮短開發周期、推動創新以及改善應用服務。如今全球有數百萬開發人員運行著超過 51 億個 Java 虛擬機, Java 仍是企業和開發人員的首選開發平臺。 課程內容的介紹 1. 計算機網絡基礎 2. So…

數據結構基礎介紹

一.起源及重要性 1968 年,美國的高德納 Donakl E . Kn uth 教授在其所寫的《 計算機程序藝術》第一卷《基本算法 》 中,較系統地闡述了數據的邏輯結構和存儲結構及其操作, 開創了數據結構的課程體系 ,數據結構作為一門獨立的…

B029-JDBC增強

目錄 PreparedStatement 查詢1.sql注入2.Statement分析 (面試題)3.PreparedStatement (面試題) 登錄功能的完善事務鏈接池概念實現DBCP連接池實現第一種配置方式第二種配置方式 返回主鍵BaseDao的抽取 PreparedStatement 查詢 1.sql注入 就是在sql的字符串拼接的時候&#xf…

基于單片機的定時插座在智能家居中的應用

近年來,隨著科學技術的發展迅速,人們對智能化的要求越來越高。越來越多的智能化產品進入千家萬戶,如電腦電視、掃地機器人、智能空氣凈化器等。這些家居電器和電子產品大都需要連接電源,為滿足多種用電器的正常使用,延…

DevEco Studio 生成HPK文件

DevEco Studio 生成HPK文件 一、安裝環境 操作系統: Windows 10 專業版 IDE:DevEco Studio 3.1 SDK:HarmonyOS 3.1 二、生成HPK文件 生成的HPK文件存放在entry文件夾下。下圖是未生成HPK的樣式。 生成HPK:菜單Build->Build Hap(s)/APP(s)->Build Hap(s)…

啟動jar包命令

一、Windows環境 找到jar包的位置; 按shift鍵,點擊鼠標右鍵,選中在此處打開PowerShell窗口; 此時進入命令行工具 輸入java -jar .\java_web-0.0.1-SNAPSHOT.jar(注意空格)。 二、Linux環境 2.1 方式一 …

039.Python面向對象_三大特性綜合案例2

我 的 個 人 主 頁:👉👉 失心瘋的個人主頁 👈👈 入 門 教 程 推 薦 :👉👉 Python零基礎入門教程合集 👈👈 虛 擬 環 境 搭 建 :👉&…