PyTorch Tensor維度變換實戰:view/squeeze/expand/repeat全解析

本文從圖像數據處理、模型輸入適配等實際場景出發,系統講解PyTorch中viewsqueezeexpandrepeat四大維度變換方法。通過代碼演示對比不同方法的適用性,助您掌握數據維度調整的核心技巧。

在這里插入圖片描述

一、基礎維度操作方法
1. view:內存連續的形狀重塑
  • 核心用途: 快速調整張量形狀(需保證元素總數不變)
  • 特性: 支持-1自動推斷維度
# 圖像批處理示例
img = torch.randn(3, 224, 224)  # 單張RGB圖像 [C,H,W]
batch_img = img.unsqueeze(0)    # 添加批次維度 -> [1,3,224,224]
reshaped = batch_img.view(3, 224 * 224)  # 合并空間維度 -> [3, 49280]
2. squeeze/unsqueeze:維度壓縮與擴展
  • 典型場景: 處理網絡輸出的多余維度
# 去除單樣本預測的冗余維度
pred = model_output.view(1, 10)  # [1,10]
pred_squeezed = pred.squeeze()   # -> [10]
二、維度擴展方法:expandrepeat
3. expand:虛擬廣播擴增
  • 特點: 不占用額外內存,僅擴展維度至目標形狀
  • 適用場景: 廣播機制下的批量操作
# 圖像風格遷移中的特征擴展
style_features = torch.randn(1, 512, 7, 7)  # [C,H,W]
expanded_style = style_features.expand(-1, -1, 28, 28)  # -> [1,512,28,28]# 批量標準化時的維度匹配
batch_norm = nn.BatchNorm2d(3)
img = torch.randn(1,3,224,224)
normalized = batch_norm(img.expand(4, -1, -1, -1))  # 虛擬擴展為4個假樣本
4. repeat:真實數據復制
  • 特點: 實際復制數據生成新Tensor
  • 適用場景: 數據增強、創建冗余維度
# 單張圖像轉批量訓練數據
single_img = torch.randn(3, 224, 224)
batch_data = single_img.repeat(5, 1, 1)  # 復制5次 -> [5,3,224,224]# 調整通道數匹配模型輸入
gray_img = torch.randn(1, 224, 224)  # 灰度圖 [C,H,W]
rgb_img = gray_img.repeat(3, 1, 1)     # 強制轉為偽彩色 -> [3,224,224]
三、典型應用場景對比
方法內存占用維度擴展方式圖像處理場景
view形狀重塑特征圖展平輸入全連接層
squeeze刪除冗余維度去除網絡輸出的批次維度
expand極低廣播虛擬擴展風格遷移中的特征廣播
repeat實際數據復制將單樣本擴展為小批量訓練數據
場景示例:圖像數據增強
# 將單個圖像擴展為4個樣本并添加噪聲
original = torch.randn(3, 256, 256)# 方法對比
noise_expanded = original.unsqueeze(0).expand(4, -1, -1, -1) + torch.randn_like(original)
noise_repeated = original.repeat(4,1,1) + torch.randn(4,3,256,256)*0.1print(noise_expanded.shape)  # [4,3,256,256] (內存共享)
print(noise_repeated.shape)  # [4,3,256,256] (獨立內存)
四、進階技巧與注意事項
  1. 動態維度擴展
# 根據輸入尺寸自適應擴展
def adaptive_style_transfer(content_feat, style_feat):# 將風格特征擴展到內容特征尺寸target_size = content_feat.size()[2:]return style_feat.expand_as(content_feat)
  1. 混合使用技巧
# 同時調整維度和復制數據
x = torch.randn(1, 64)
x = x.view(64, 1).expand(64, 3)  # -> [64,3]
  1. 性能優化建議
  • 優先使用expand處理廣播場景
  • repeat后需及時調用.contiguous()保證內存連續性
  • 結合permute實現復雜維度變換

結尾

維度變換是深度學習實戰中的核心技能。viewsqueeze擅長精簡調整,而expandrepeat專注于靈活擴展。在實際應用中:

  • 圖像處理優先考慮expand的廣播優勢
  • 模型輸入適配推薦repeat的確定性擴展
  • 復雜場景可通過permute+view組合拳解決

掌握這些技巧后,您將能優雅應對CNN特征處理、RNN序列構建、GAN數據生成等各類深度學習任務中的維度挑戰!

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

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

相關文章

Kubernetes nodeName Manual Scheduling practice (K8S節點名稱綁定以及手工調度)

Manual Scheduling 在 Kubernetes 中,手動調度框架允許您將 Pod 分配到特定節點,而無需依賴默認調度器。這對于測試、調試或處理特定工作負載非常有用。您可以通過在 Pod 的規范中設置 nodeName 字段來實現手動調度。以下是一個示例: apiVe…

即時編譯器(JIT)的編譯過程是什么?

1. 觸發編譯 JIT編譯的觸發基于熱點代碼檢測,主要通過兩種計數器: ? 方法調用計數器:統計方法被調用的次數(默認閾值:C1為1,500次,C2為10,000次)。 ? 回邊計數器:統計循環體的執行…

Java基礎:集合List、Map、Set(超詳細版)

集合體系概述 Collection常用方法 補充:addAll() Collection的遍歷方式 迭代器 增強for(空集合可以,null不可以) lambda 集合對象存儲對象原理 遍歷方式的區別 List集合 特點、特有方法 遍歷方式 (同上&#xff09…

Elasticsearch 全面解析

Elasticsearch 全面解析 前言一、簡介核心特性應用場景 二、核心原理與架構設計1. 倒排索引(Inverted Index)2. 分片與副本機制(Sharding & Replication)3. 節點角色與集群管理 三、核心特點1. 靈活的查詢語言(Que…

【2】k8s集群管理系列--包應用管理器之helm(Chart語法深入應用)

一、Chart模板:函數與管道 常用函數: ? quote:將值轉換為字符串,即加雙引號 ? default:設置默認值,如果獲取的值為空則為默認值 ? indent和nindent:縮進字符串 ? toYaml:引用一…

JVM 字節碼是如何存儲信息的?

JVM 字節碼是 Java 虛擬機 (JVM) 執行的指令集,它是一種與平臺無關的二進制格式,在任何支持 JVM 的平臺上都可運行的Java 程序。 字節碼存儲信息的方式,主要通過以下幾個關鍵組成部分和機制來實現: 1. 指令 (Opcodes) 和 操作數 …

基于51單片機語音實時采集系統

基于51單片機語音實時采集 (程序+原理圖+PCB+設計報告) 功能介紹 具體功能: 系統由STC89C52單片機ISD4004錄音芯片LM386功放模塊小喇叭LCD1602按鍵指示燈電源構成 1.可通過按鍵隨時選擇相應的錄音進行播…

關于 Java 預先編譯(AOT)技術的詳細說明,涵蓋 GraalVM 的配置、Spring Boot 3.x 的集成、使用示例及優缺點對比

以下是關于 Java 預先編譯(AOT)技術的詳細說明,涵蓋 GraalVM 的配置、Spring Boot 3.x 的集成、使用示例及優缺點對比: 1. 預先編譯(AOT)技術詳解 1.1 核心概念 AOT(Ahead-of-Time&#xff09…

【ROS2】行為樹:BehaviorTree

1、簡介 與狀態機不同,行為樹強調執行動作,而不是狀態之間的轉換。 行為樹是可組合的。可以重復使用簡單的行為來構建復雜的行為。 在游戲領域,行為樹已經比較流行了。主要用于維護游戲角色的各種動作和狀態。 ROS2的導航框架Navigation2中引入了行為樹來組織機器人的工作流…

Centos7.9 升級內核,安裝RTX5880驅動

系統鏡像下載 https://vault.centos.org/7.9.2009/isos/x86_64/CentOS-7-x86_64-DVD-2009.iso 系統安裝步驟省略 開始安裝顯卡驅動 遠程登錄查看內核 [root192 ~]# uname -a Linux 192.168.119.166 3.10.0-1160.el7.x86_64 #1 SMP Mon Oct 19 16:18:59 UTC 2020 x86_64 x8…

多層感知機與全連接神經網絡關系解析

感知機(Perceptron)、多層感知機(MLP,Multilayer Perceptron)和全連接神經網絡(FCNN,Fully Connected Neural Network)是神經網絡發展過程中密切相關的概念,但它們有明確…

解析醫療器械三大文檔:DHF、DMR與DHR

醫療器械的 DHF、DMR 和 DHR 是質量管理體系(QMS)中的核心文件,貫穿產品全生命周期, 確保醫療器械的安全性、有效性和合規性。 一、三大文件的定義與法規依據 縮寫全稱法規依據(以 FDA 為例)核心目的DHF…

netty啟用websocket的壓縮機制

netty啟用websocket的壓縮機制 package com.aerotop.connector.websocket.base;import io.netty.channel.ChannelInitializer; import io.netty.channel.ChannelPipeline; import io.netty.channel.socket.SocketChannel; import io.netty.handler.codec.compression.JZlibDec…

可能存在特殊情況,比如控制臺顯示有延遲、緩沖問題等影響了顯示順序。

從控制臺輸出看,正常邏輯應是先執行 System.out.println(" 未處理異常演示 "); 輸出對應文本,再因 arr 為 null 訪問 length 觸發 NullPointerException 輸出異常信息。可能存在特殊情況,比如控制臺顯示有延遲、緩沖問題等影響…

第一節:React 基礎篇-React虛擬DOM原理及Diff算法優化策略

必考點:虛擬DOM樹對比(同級比較、Key的作用、組件類型判斷) 延伸:React 18中并發更新對Diff算法的影響 React虛擬DOM原理及Diff算法優化策略 虛擬DOM核心原理 概念: ? 虛擬DOM(Virtual DOM)…

Java spring mybatis面試題(200道),八股文

Java面試題 通過網盤分享的文件:面試題等2個文件 鏈接: https://pan.baidu.com/s/1Xw0PzkfAmL8uesYBvrW2-A?pwdpebt 提取碼: pebt mybatis相關 1、 什么是Mybatis? … 2 2、 Mybaits 的優點: … 2 3、 MyBatis 框架的缺點: ……

windows使用Python調用7-Zip【按大小分組】壓縮文件夾中所有文件

使用Python調用7-Zip【按大小分組】壓縮文件夾中所有文件 問題描述:方法前提條件任務完整代碼示例代碼如何工作? 問題描述: 我現在想把文件夾下的所有內容上傳到網盤,但是這個文件夾下的素材內容很多,使用分卷壓縮的話…

《Python星球日記》第26天:Matplotlib 可視化

名人說:路漫漫其修遠兮,吾將上下而求索。—— 屈原《離騷》 創作者:Code_流蘇(CSDN)(一個喜歡古詩詞和編程的Coder😊) 訂閱專欄:《Python星球日記》 目錄 一、Matplotlib 簡介1. 什么是 Matplo…

第1章 對大型語言模型的介紹

人類正處在一個關鍵轉折點。自2012年起,基于深度神經網絡的人工智能系統研發進入快速通道,將這一技術推向了新高度:至2019年底,首個能夠撰寫與人類文章真假難辨的軟件系統問世,這個名為GPT-2(生成型預訓練變…

dcsdsds

我將為您在頁面頂部添加歡迎內容&#xff0c;同時保持整體風格的一致性。以下是修改后的代碼&#xff0c;主要修改了模板部分和對應的樣式&#xff1a; vue 復制 <template><div class"main-wrapper"><!-- 新增歡迎部分 --><div class"…