【深度學習基礎】PyTorch Tensor生成方式及復制方法詳解

目錄

  • PyTorch Tensor生成方式及復制方法詳解
    • 一、Tensor的生成方式
      • (一)從Python列表/元組創建
      • (二)從NumPy數組創建
      • (三)特殊初始化方法
      • (四)從現有Tensor創建
    • (五)高級初始化方法
    • 二、復制方法對比
      • (一) `torch.tensor()` vs `torch.from_numpy()`
      • (二) `.clone()` vs `.copy_()` vs `copy.deepcopy()`
      • (三) 深度拷貝(Deep Copy)
    • 三、核心區別總結
    • 四、最佳實踐建議

PyTorch Tensor生成方式及復制方法詳解

在PyTorch中,Tensor的創建和復制是深度學習開發的基礎操作。本文將全面總結Tensor的各種生成方式,并深入分析不同復制方法的區別。


一、Tensor的生成方式

(一)從Python列表/元組創建

import torch# 直接創建Tensor
t1 = torch.tensor([1, 2, 3])          # 整型Tensor
t2 = torch.tensor([[1.0, 2], [3, 4]])  # 浮點型Tensor

(二)從NumPy數組創建

import numpy as nparr = np.array([1, 2, 3])
t = torch.from_numpy(arr)  # 共享內存

(三)特殊初始化方法

zeros = torch.zeros(2, 3)      # 全0矩陣
ones = torch.ones(2, 3)       # 全1矩陣
rand = torch.rand(2, 3)        # [0,1)均勻分布
randn = torch.randn(2, 3)      # 標準正態分布
arange = torch.arange(0, 10, 2) # 0-10步長為2

(四)從現有Tensor創建

x = torch.tensor([1, 2, 3])
x1 = x.new_tensor([4, 5, 6])  # 新Tensor(復制數據)
x2 = torch.zeros_like(x)       # 形狀相同,全0
x3 = torch.randn_like(x)       # 形狀相同,隨機值

(五)高級初始化方法

eye = torch.eye(3)             # 3x3單位矩陣
lin = torch.linspace(0, 1, 5)  # 0-1等分5份
log = torch.logspace(0, 2, 3)  # 10^0到10^2等分3份

二、復制方法對比

(一) torch.tensor() vs torch.from_numpy()

方法數據源內存共享梯度傳遞數據類型
torch.tensor()Python數據不共享支持自動推斷
torch.from_numpy()NumPy數組共享不支持保持一致
# 示例:內存共享驗證
arr = np.array([1, 2, 3])
t = torch.from_numpy(arr)
arr[0] = 99  # 修改NumPy數組
print(t)      # tensor([99, 2, 3]),同步變化

(二) .clone() vs .copy_() vs copy.deepcopy()

方法內存共享梯度傳遞計算圖保留使用場景
.clone()不共享保留梯度保留計算圖需要梯度回傳
.copy_()目標共享不保留破壞計算圖高效覆蓋數據
copy.deepcopy()不共享不保留不保留完全獨立拷貝
# 示例:梯度傳遞對比
x = torch.tensor([1.], requires_grad=True)
y = x.clone()
z = torch.tensor([2.], requires_grad=True)
z.copy_(x)  # 覆蓋z的值y.backward()  # 正常回傳梯度到x
# z.backward() # 報錯!copy_()破壞計算圖

(三) 深度拷貝(Deep Copy)

import copyorig = torch.tensor([1, 2, 3])
deep_copied = copy.deepcopy(orig)  # 完全獨立拷貝

三、核心區別總結

  1. 內存共享

    • from_numpy() 與NumPy共享內存
    • 視圖操作(如view()/切片)共享內存
    • 其他方法均創建獨立副本
  2. 梯度處理

    • .clone() 唯一保留梯度計算圖
    • copy_() 會破壞目標Tensor的計算圖
    • torch.tensor() 創建新計算圖
  3. 使用場景

    • 需要梯度回傳:使用.clone()
    • 高效數據覆蓋:使用.copy_()
    • 完全獨立拷貝:使用copy.deepcopy()
    • 與NumPy交互:使用from_numpy()/numpy()

四、最佳實踐建議

  1. 優先使用torch.tensor()創建新Tensor
  2. 需要從NumPy導入數據且避免復制時用from_numpy()
  3. 在計算圖中復制數據時必須使用.clone()
  4. 需要覆蓋現有Tensor數據時使用.copy_()
  5. 調試時注意內存共享可能導致的意外修改
# 正確梯度傳遞示例
x = torch.tensor([1.], requires_grad=True)
y = x.clone() ** 2  # 保留計算圖
y.backward()        # 梯度可回傳到x

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

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

相關文章

動態規劃:入門思考篇

1. 簡單類比 假如我們要求全國人數,那么我們只要知道各個省的人數,然后將各個省的人數相加即可,要想知道各個省的人數,只要將這個省下面所有的市人數相加即可,同樣,如果想要知道各個市的人數,只…

小楊的 X 字矩陣(舉一反三)-洛谷B3865 [GESP202309 二級]

題目描述 小楊想要構造一個 X 字矩陣( 為奇數),這個矩陣的兩條對角線都是半角加號 ,其余都是半角減號 - 。例如,一個 55 的 X 字矩陣如下: --- --- ---- --- --- 請你幫小楊根據給定的 打印出對應的“X …

數據組合與合并:Pandas 數據整合全指南 +缺失值處理

數據組合與合并:Pandas 數據整合全指南在進行數據分析之前,數據清洗與整合是關鍵步驟。 遵循“整潔數據”(Tidy Data)原則: 每個觀測值占一行每個變量占一列每種觀測單元構成一張獨立的表格 整理好數據后,常…

c#聯合halcon的基礎教程(案例:亮度計算、角度計算和缺陷檢測)(含halcon代碼)

目錄 1.環境配置 2.案例一:亮度計算 halcon代碼: 主界面代碼: 3.案例二: 角度計算 halcon代碼: 主界面代碼: 4.案例三:缺陷檢測 halcon代碼: 主界面代碼: 通過…

大數據云原生是什么

"云原生"(Cloud Native)指的是?利用云計算原生優勢(彈性、按需服務、自動化、分布式等)來設計、構建、部署和運行大數據應用和工作負載的方法論與技術體系?。它不是簡單地“把大數據平臺搬到云上”,而是從…

Pytest項目_day16(yaml和parametrize結合)

查詢手機號歸屬地 我們首先可以在YAML文件中定義測試數據 方式一,使用- 注意:當我們需要一次傳入兩個參數時,需要定義兩層迭代,即兩層列表不夠直觀,容易寫錯 輸出的結果為: 然后我們可以將測試數據傳入test…

【Nginx指南】從核心原理到生產實踐

目錄Nginx指南:從核心原理到生產實踐引言:Nginx在現代架構中的核心地位一、Nginx核心能力與應用場景1.1 多場景適配的全能型中間件1.2 技術優勢:Nginx成為行業標準的關鍵二、Nginx安裝部署:源碼編譯與包管理方案2.1 源碼編譯&…

物體檢測

目錄 1 目標定位 2 地標檢測 3 目標檢測 4 在卷積網絡上實現滑動窗口 5 邊界框預測 6 交并比 7 非極大值抑制 8 錨框 9 YOLO算法 10 用u-net進行語義分割 11 轉置卷積 12 u-net 結構靈感 1 目標定位 你已經對圖片分類有所了解。例如通過這張圖片可以識…

es7.x es的高亮與solr高亮查詢的對比對比說明

一 solr&es高亮1.1 solr與es高亮功能解釋說明:1)高亮配置:fragmentSize(1000) 設置片段長度numOfFragments(1) 指定返回的片段數量preTags() 和 postTags() 設置高亮標記2)字段處理差異:在 ES 中,使用 matchQuery 而非 termQ…

DSP音頻算法工程師技能2

一、核心知識準備1. 算法原理3A算法(AGC自動增益控制/AEC回聲消除/ANS降噪):掌握AEC的NLMS/雙講檢測原理,ANS的譜減法/維納濾波,AGC的壓縮曲線設計。熟悉Speex/WebRTC等開源實現。EQ音效:IIR/FIR濾波器設計…

第4章-04-用WebDriver頁面元素操作

??作者簡介,黑夜開發者,CSDN領軍人物,全棧領域優質創作者?,CSDN博客專家,阿里云社區專家博主,2023年CSDN全站百大博主。 ??數年電商行業從業經驗,歷任核心研發工程師,項目技術負責人。 ??本文已收錄于專欄:Web爬蟲入門與實戰精講,后續完整更新內容如下。 文章…

【計算機視覺與深度學習實戰】04基于K-Means聚類的圖像分割系統設計與實現

摘要 圖像分割作為計算機視覺領域的基礎任務,在目標檢測、醫學影像分析、自動駕駛等眾多應用中發揮著關鍵作用。本文基于K-Means聚類算法設計并實現了一個完整的圖像分割系統,該系統集成了多種顏色空間轉換、自定義初始化策略、空間特征融合等先進技術。通過Python和Tkinter…

Android Studio常用知識總結

一、運行方式1.運行 (Run)當您選擇“運行”時,Android Studio 會編譯您的應用并將其安裝到目標設備或模擬器上。這通常用于:快速部署: 您只想看看應用是否能正常啟動并運行,或者進行一些基礎的用戶界面測試。性能測試: 在正常運行模式下測試應…

設計模式筆記_行為型_訪問者模式

1. 訪問者模式介紹訪問者模式(Visitor Pattern)是一種行為型設計模式,它允許你在不改變對象結構的前提下,定義作用于這些對象的新操作。訪問者模式將操作的邏輯從對象結構中分離出來,使得你可以在運行時動態地添加新的…

數學建模 14 中心對數比變換

用途:是處理成分數據的核心預處理方法,核心目標是解決成分數據的和為常數100% , 導致的維度冗余,非線性相關問題。使得數據滿足傳統的統計/建模方法;舉例子:食品比例中 面粉(50%),糖(30%),水(20%)原理&…

【C語言強化訓練16天】--從基礎到進階的蛻變之旅:Day7

🔥個人主頁:草莓熊Lotso 🎬作者簡介:C研發方向學習者 📖個人專欄: 《C語言》 《數據結構與算法》《C語言刷題集》《Leetcode刷題指南》 ??人生格言:生活是默默的堅持,毅力是永久的…

污水處理行業的 “智能革命”:邊緣計算網關如何重塑傳統運維模式?

污水處理行業的 “智能革命”:邊緣計算網關如何重塑傳統運維模式?在污水處理這一關乎生態環境與可持續發展的關鍵領域,藍蜂網關正憑借其先進技術與強大功能,發揮著無可替代的重要作用。作為工業級物聯網解決方案的核心組件&#x…

ASP.NET Core 中的多租戶 SaaS 應用程序

介紹隨著軟件即服務 (SaaS) 持續主導技術領域,構建能夠高效地從單一代碼庫服務于多位客戶(租戶)的應用程序變得至關重要。ASP.NET Core 憑借其模塊化和可擴展的架構,是實現多租戶 SaaS 應用程序的強大框架。本文將指導您了解構建多…

JUC之CompletableFuture【中】

文章目錄四、CompletableFuture基本使用4.1 默認線程池、無返回值4.2 默認線程池、有返回值4.3 自定義線程池、有返回值4.4 CompletableFuture 獲取結果五、對結果進行處理5.1 方法說明5.2 示例5.3 thenApply vs thenApplyAsync5.3.1 核心區別: 執行線程不同5.3.2 thenApply: 同…

環境變量不生效?

目錄 添加環境變量 解決不生效 不生效場景 解決辦法 大家都知道Windows系統對于開發者來說并不友好,尤其是新手,當然這是相比于linux和MacOS相比,因為開發工具、項目腳本等環境配置要為復雜,注意事項也更多一些。而這篇文章將…