Day25_【深度學習(3)—PyTorch使用(5)—張量形狀操作】

  • reshape()?
  • squeeze()
  • unsqueeze()
  • transpose()
  • permute()
  • view()? ==?reshape()?
  • contiguous() ==?reshape()?

一、reshape() 函數

保證張量數據不變的前提下改變數據的維度,將其轉換成指定的形狀

def reshape_tensor():data = torch.tensor([[1, 2, 3], [4, 5, 6]])print(data, data.shape)  # pytorch中shape=size()  都可以獲得張量的形狀data1=data.reshape(1, 6) #reshape行列相乘要等于數據data的總個數# data1=data.reshape(6) # 等于上一行print(data1, data1.shape)data2=data.reshape(3,-1) #-1 自動推斷,已知三行自動推斷列數# data2=data.reshape(-1) #-1 自動推斷print(data2, data2.shape)if __name__ == '__main__':reshape_tensor()

擴展

pytorch中 shape=size() ?都可以獲得張量的形狀

# 擴展:size,和shape是等價的,都是看數據的維度
# print("data1-->", data1.shape, data1.size())
# shape[0] <=> size()[0] <=> size(0)
# shape[1] <=> size()[1] <=> size(1)print("data1-->", data, data.shape[0], data.size(1))

二、squeeze() 和 unsqueeze()

squeeze 函數刪除 形狀為 1 的維度(升維),unsqueeze 函數添加形狀為1的維度(降維)。

# 生維與降維
def unsqueeze_squeeze_tensor():# 準備數據data = torch.tensor([1, 2, 3, 4, 5])print('data-->', data, data.shape)# 升維: unsqueeze(), 增加一個維度,這個維度的長度為1# data1 = data.unsqueeze(dim=0) # [1, 5]# data1 = data.unsqueeze(dim=1) # [5, 1]data1 = data.unsqueeze(dim=-1).unsqueeze(dim=0)  # [1, 5, 1]# data1 = data.unsqueeze(dim=2)  # [5, 1] 會報錯,越界print("data1-->", data1, data1.shape)# 降維: squeeze(), 能夠減少維度為1的維度# 所有長度為1的維度都會降低。data2 = data1.squeeze()# print("data2-->", data2, data2.shape)
if __name__ == '__main__':unsqueeze_squeeze_tensor()

三、transpose() 和 permute()

transpose 函數可以實現交換張量形狀的指定維度, 例如: 一個張量的形狀為 (2, 3, 4) 可以通過 transpose 函數把 3 和 4 進行交換, 將張量的形狀變為 (2, 4, 3)

permute 函數可以一次交換更多的維度

def transpose_permute_tensor():# 生成隨機張量,并設置隨機種子,保持隨機張量是固定值torch.manual_seed(0)data = torch.randint(0, 10, (3, 4, 5))print(data, data.shape)# .transpose指定交換的兩個維度data1=data.transpose(1, 2) # torch.Size([3, 5, 4])# data1=data.transpose(0, 2)print(data1, data1.shape) # torch.Size([5, 4, 3])# .permute指定交換的多個維度data2 = data.permute(2,0,1)print(data2, data2.shape) # torch.Size([5, 3, 4])
if __name__ == '__main__':transpose_permute_tensor()

五、view() 和 contiguous()

????????view 函數也可以用于修改張量的形狀,但是其用法比較局限,只能用于存儲在整塊內存中的張量。在 PyTorch 中,有些張量是由不同的數據塊組成的,它們并沒有存儲在整塊的內存中,view 函數無法對這樣的張量進行變形處理,例如: 一個張量經過了 transpose 函數的處理之后,就無法使用 view 函數進行形狀操作。

view 函數也可以用于修改張量的形狀, 但是它要求被轉換的張量內存必須連續,所以一般配合 contiguous 函數使用。

def view_contiguous_tensor():torch.manual_seed(0)data = torch.randint(0, 10, (3, 4, 5))print(data, data.shape)data = data.transpose(1, 2)  # 不連續 torch.Size([3, 5, 4])# data = data.permute(1, 2, 0)# data = data.view(1, 2, -1) # data不連續后,調用view函數會報錯print(data, data.shape)print(data.is_contiguous())  # 判斷是否連續# print(data.contiguous().is_contiguous())  # 通過contiguous把不連續的內存空間變成連續print(data.contiguous().view(3,4,5))  # 再view()
if __name__ == '__main__':view_contiguous_tensor()

六、小結

  • reshape 函數可以在保證張量數據不變的前提下改變數據的維度
  • squeeze 和 unsqueeze 函數可以用來增加或者減少維度
  • transpose 函數可以實現交換張量形狀的指定維度, permute 可以一次交換更多的維度
  • view 函數也可以用于修改張量的形狀, 但是它要求被轉換的張量內存必須連續, 所以一般配合 contiguous 函數使用

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

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

相關文章

第十八篇 開發網頁教學:實現畫布、繪畫、簡易 PS 方案

在網頁開發領域&#xff0c;畫布功能是實現交互創作的重要基礎&#xff0c;無論是簡單的繪畫工具&#xff0c;還是具備基礎修圖能力的簡易 PS 方案&#xff0c;都能為用戶帶來豐富的視覺交互體驗。本篇教學將圍繞 “學習 - 實踐 - 實操” 的核心思路&#xff0c;從技術原理講解…

封裝形成用助焊劑:電子制造“隱形橋梁”的技術突圍與全球產業重構

在5G通信、人工智能、新能源汽車等新興技術驅動下&#xff0c;全球電子制造業正以年均6.8%的增速重構產業鏈。作為電子元件焊接的核心輔料&#xff0c;封裝形成用助焊劑&#xff08;又稱電子封裝用助焊劑&#xff09;憑借其“優化焊接質量、提升可靠性、降低制造成本”的核心價…

【完整源碼+數據集+部署教程】零件實例分割系統源碼和數據集:改進yolo11-GhostHGNetV2

背景意義 研究背景與意義 隨著工業自動化和智能制造的迅速發展&#xff0c;零件的高效識別與分割在生產線上的重要性日益凸顯。傳統的圖像處理方法在處理復雜場景時往往面臨著準確性不足和實時性差的問題&#xff0c;而深度學習技術的引入為這一領域帶來了新的機遇。特別是基于…

墨色規則與血色節點:C++紅黑樹設計與實現探秘

前言? 前幾天攻克了AVL樹&#xff0c;我們已然是平衡二叉樹的強者。但旅程還未結束&#xff0c;下一個等待我們的&#xff0c;是更強大、也更傳奇的**終極BOSS**——紅黑樹。它不僅是map和set的強大心臟&#xff0c;更是C STL皇冠上的明珠。準備好了嗎&#xff1f;讓我們一…

大數據時代時序數據庫選型指南:為何 Apache IoTDB 成優選(含實操步驟)

在數字經濟加速滲透的今天&#xff0c;工業物聯網&#xff08;IIoT&#xff09;、智慧能源、金融交易、城市運維等領域每天產生海量 “帶時間戳” 的數據 —— 從工業設備的實時溫度、電壓&#xff0c;到電網的負荷波動&#xff0c;再到金融市場的每秒行情&#xff0c;這類 “時…

MAZANOKE+cpolar讓照片存儲無上限

文章目錄前言1. 關于MAZANOKE2. Docker部署3. 簡單使用MAZANOKE4. 安裝cpolar內網穿透5. 配置公網地址6. 配置固定公網地址總結當工具開始理解用戶的需求痛點時&#xff0c;MAZANOKE與cpolar這對搭檔給出了“輕量化”的解決方案。它不追求浮夸的功能堆砌&#xff0c;卻用扎實的…

正則表達式 - 元字符

正則表達式中的元字符是具有特殊含義的字符&#xff0c;它們不表示字面意義&#xff0c;而是用于控制匹配模式。基本元字符. (點號)匹配除換行符(\n)外的任意單個字符示例&#xff1a;a.b 匹配 "aab", "a1b", "a b" 等^ (脫字符)匹配字符串的開始…

suricata源碼解讀-事務日志

注冊事務日志線程模塊 void TmModuleTxLoggerRegister (void) {tmm_modules[TMM_TXLOGGER].name "__tx_logger__";tmm_modules[TMM_TXLOGGER].ThreadInit OutputTxLogThreadInit;tmm_modules[TMM_TXLOGGER].Func OutputTxLog;tmm_modules[TMM_TXLOGGER].ThreadExi…

【CSS】層疊上下文和z-index

z-index 的作用范圍受“層疊上下文&#xff08;stacking context&#xff09;”影響。&#x1f539; 1. z-index 的基本作用 控制元素在 同一個層疊上下文&#xff08;stacking context&#xff09; 內的堆疊順序。值越大&#xff0c;顯示層級越靠上。&#x1f539; 2. 什么是層…

自動化腳本的降本增效實踐

一、自動化腳本的核心價值自動化腳本通過模擬人類操作完成重復性任務&#xff0c;其核心價值體現在三個維度&#xff1a;首先&#xff0c;在時間成本方面&#xff0c;標準化的數據處理流程可縮短90%以上的操作耗時&#xff1b;其次&#xff0c;在人力成本上&#xff0c;單個腳本…

【C語言】第七課 字符串與危險函數??

C語言中的字符串處理既是基礎&#xff0c;也是安全漏洞的重災區。理解C風格字符串的底層原理及其危險函數的運作方式&#xff0c;對于編寫安全代碼和進行逆向工程分析至關重要。 &#x1f9e9; C風格字符串的本質 C風格字符串本質上是以空字符\0&#xff08;ASCII值為0&#xf…

Mac安裝hadoop

1.在terminal中檢查是否安裝brew命令 brew --version 如果沒有安裝&#xff0c;在terminal中執行命令&#xff0c;安裝brew /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)" 安裝完成后&#xff0c;再重新打…

多語言編碼Agent解決方案(4)-Eclipse插件實現

Eclipse插件實現&#xff1a;支持多語言的編碼Agent集成 本部分包含Eclipse插件的完整實現&#xff0c;包括多語言支持、命令注冊、API調用和UI集成。插件使用Java開發&#xff0c;基于Eclipse Plugin Development Environment (PDE)。 1. Eclipse插件目錄結構 eclipse-plugin/…

風險規則引擎-RPA 作為自動化依賴業務決策流程的強大工具

機器人流程自動化&#xff08;RPA&#xff09;聽起來好像跟機器人統治世界似的&#xff0c;但其實不是那么回事。RPA 就是一套能在電腦上運行的程序&#xff0c;能快速、高效地自動完成日常重復的工作。RPA 讓你能夠設置一些軟件“機器人”來執行特定的任務。RPA 的一個大好處就…

漏洞無效化學習

一、基礎概念與原理1. 核心定義漏洞無效化&#xff08;Vulnerability Mitigation&#xff09;&#xff1a;并非直接修補漏洞本身&#xff0c;而是通過技術手段降低漏洞被成功利用的概率。其目標是讓攻擊者即使發現漏洞也無法達成攻擊目的。 關鍵思路&#xff1a;通過訪問控制、…

「Vue 項目中實現智能時間選擇:帶業務規則的級聯選擇器」

#創作靈感公司業務需要&#xff0c;某個時間節點前可以選擇到月&#xff0c;某個時間節點后只能選擇季度vue2 Vant2javascriptimport { Cascader, Field, Form, Popup, Button } from vant; import vant/lib/index.css;export default {name: CascaderPage,components: {VanCa…

day1———Qt———應用程序界面設置

1&#xff0c;定義一個Mystring類代替string的功能#include <iostream> #include <string.h>using namespace std; class Mystring {friend ostream &operator<<(ostream &cout,const Mystring &s);friend istream &operator>>(istrea…

apache實現LAMP+apache(URL重定向)

1.apache實現LAMPLAMP是指一組通常一起使用來運行動態網站的自由軟件名稱首字母的縮寫a.L是指Linux操作系統b,.A是指Apache&#xff0c;用來提供Web服務c.M指MySQL&#xff0c;用來提供數據庫服務d.P指PHP&#xff0c;是動態網站的一種開發語言1.1php運行方式說明php是腳本語言…

SAConv可切換空洞卷積

SAConv可切換空洞卷積 帶來的改進機制時可切換的空洞卷積 是一種創新型卷積網絡 專門為增強物體檢測和分割任務&#xff0c;中特征提取去設計 SAC核心時相同的輸入兒子應用到不同空洞率去進行卷積&#xff0c;設計特別開關函數融合這些不同卷積的成果 該方法可讓網絡更靈活的適…

基于Matlab的霧霾天氣和夜間車牌識別系統

在復雜天氣和低光照環境下&#xff0c;車牌識別系統的準確率和穩定性顯著下降&#xff0c;嚴重影響交通管理與智能監控的可靠性。本文針對霧霾天氣和夜間環境下車牌圖像特征模糊、對比度低、噪聲干擾嚴重的問題&#xff0c;提出了一種融合圖像增強與模板匹配的車牌識別方法。系…