張量-pytroch基礎(2)

張量-pytroch網站-筆記

張量是一種特殊的數據結構,跟數組(array)和矩陣(matrix)非常相似。

張量和 NumPy 中的 ndarray 很像,不過張量可以在 GPU 或其他硬件加速器上運行。

事實上,張量和 NumPy 數組有時可以共享底層內存,也就是說,不用來回復制數據(具體可以參考:與 NumPy 的橋接)。

張量還被優化過,用來自動求導

概念通俗理解
Tensor(張量)就是一個高級的“數組”,支持多維度、高性能計算
用途是 PyTorch 中處理數據的核心工具,用來裝模型的輸入、輸出和參數
優勢可以在 GPU 上運行、和 NumPy 兼容、支持自動求導

?初始化一個張量(Tensor)
張量可以用很多不同的方法來創建。下面是一些例子:

從已有數據直接創建
張量可以直接用數據來創建,數據類型(比如整數、浮點數)會自動識別。

  • 張量就像“多維數組”

  • 你可以直接傳入一個 Python 列表或列表嵌套,就能創建出張量

  • PyTorch 會自動判斷你傳入的數據是什么類型,比如整數、浮點數等

?從 NumPy 數組創建張量
張量可以從 NumPy 數組創建

  • PyTorch 和 NumPy 是好兄弟

  • 可以:

    • 把 NumPy 數組變成張量:用于神經網絡訓練

    • 也可以把張量變回 NumPy 數組:用于數學計算或繪圖

  • 它們還可以共享內存,不需要復制,提高效率

反過來,把張量變成 NumPy:

?

從另一個張量創建新張量:
新張量會自動保留原張量的屬性(比如形狀、數據類型),除非你手動改了它。?

使用 torch.ones_like(x_data) 創建一個 x_data 形狀完全相同,但元素全部為 1 的張量。?

使用 torch.rand_like(x_data) 創建一個和 x_data 形狀一樣的 隨機數張量(數值范圍在 [0, 1) 之間的浮點數)

使用隨機值或常數值創建張量時,shape 是一個表示張量維度的元組。在下面這些函數中,shape 用來確定輸出張量的維度。

張量(Tensor)的屬性用來描述它的:

  1. 形狀(shape)

  2. 數據類型(datatype)

  3. 所在設備(device)

?

PyTorch 提供了 超過 1200 種張量操作,包括:

  • 算術運算(加減乘除)

  • 線性代數運算(矩陣乘法、逆矩陣等)

  • 矩陣操作(轉置、索引、切片等)

  • 采樣(比如從概率分布中隨機取樣)

所有這些操作都可以在:

  • CPU

  • 或者加速器上運行,例如:

    • CUDA(NVIDIA 的 GPU)

    • MPS(Mac 上的 GPU 加速)

    • MTIA, XPU(英特爾或其他廠商的加速器)

?

如果在用 Google Colab(一個在線的 Python 運行環境):

  • 可以點擊菜單欄的:

    Runtime > Change runtime type > GPU

  • 來分配一個 GPU 加速器,從而提升運算效率。

?

  • 默認情況下,張量是在 CPU 上創建的。

  • 如果想讓它在 GPU 上運算,就需要用 .to() 方法顯式地移動:

  • device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
    x = x.to(device)
    

    在不同設備(比如從 CPU → GPU)之間移動大張量時,會消耗時間和內存

  • PyTorch 支持大量張量操作,這些操作可以在 CPU 或各種加速器(如 GPU)上運行。但默認張量是在 CPU 上,需要手動移動到 GPU,而且大張量的設備間拷貝是耗資源的,要謹慎操作。

  • 你可以嘗試一下列表中的一些操作(指張量的操作)。如果你熟悉 NumPy 的 API(編程接口),你會發現 PyTorch 的張量 API 用起來非常簡單,就像“輕而易舉”一樣

4行4列?標準索引和切片方法

dim=1 列,cat合并

  • torch.cat 是 PyTorch 中的一個函數,用來拼接多個張量

  • 拼接時要求:除了指定拼接的那個維度以外,其他維度必須一致

  1. tensor.T:表示張量 tensor轉置(把行列對換)。

  2. @matmul() 都是做 矩陣乘法 的方式,它們等價。

  3. out=y3 是在指定:把結果 直接存儲進 y3,不返回新張量,節省內存。

  • 這部分不是做矩陣乘法,而是逐個元素相乘(element-wise multiply)

  • 也就是說 tensor[i][j] * tensor[i][j],每個元素單獨相乘。

  • 和矩陣乘法的規則不同,不涉及轉置、不涉及矩陣行列數匹配

  • 總結對比:

    運算類型操作符 / 函數是否逐元素?是否需要轉置?輸出維度變化?
    矩陣乘法@, matmul()? 否? 通常需要轉置? 會變
    逐元素乘法(Hadamard)*, mul()? 是? 不需要? 不變

?單元素張量(single-element tensor)是指只有一個元素的張量。
比如你對一個張量做了求和(sum)、平均(mean)等操作,結果就是一個單個值的張量。
如果你想把這個張量變成普通的 Python 數值(比如 intfloat),可以使用 .item() 方法

In-place operations(就地操作)是指那些直接把結果存回原變量的操作。
這類操作的特點是:不會創建新張量,而是直接修改原張量本身

它們通常在函數名后面加一個 下劃線 _ 來表示,比如:

  • x.copy_(y):把 y 的值復制進 x,直接修改 x 的內容。

  • x.t_():將 x 轉置結果直接替代原來的 x

?就地操作(in-place operations)雖然可以節省一些內存
但在計算梯度(導數)時可能會出問題,因為它們會立即丟失計算歷史(history)
所以一般不推薦在需要反向傳播(backpropagation)的時候使用 in-place 操作

在 PyTorch 中,自動求導(autograd)系統需要記錄每一個操作的計算歷史,以便后面做反向傳播(計算梯度)。

  • 普通操作會保留這些歷史;

  • 就地操作(比如 x += 1x.copy_(...))會直接覆蓋原變量的值,導致 PyTorch 無法回溯計算路徑,從而報錯或者計算錯誤。

  • in-place 操作雖然省內存,但有可能破壞 PyTorch 的計算圖,導致梯度無法正確求解,因此在訓練模型時最好避免使用。

?

當張量(Tensor)位于 CPU 上時,它和 NumPy 數組可以共享底層內存地址(memory location)
所以修改其中一個,另一個也會跟著改變

?

改動 NumPy,也會影響張量?

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

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

相關文章

marked庫(高效將 Markdown 轉換為 HTML 的利器)

文章目錄 前言使用基本使用自定義渲染器例子 代碼高亮 前言 最近嘗試了一下通過星火大模型將ai引入到項目上,但是ai返回的數據可以顯而易見的發現是markedown語法的,那么就需要一個工具,將類似這種的格式轉換為markdown格式 Marked 是一個用…

調用deepseek大模型時智能嵌入函數

DeepSeek-R1 當前炙手可熱,以其強大的自然語言處理和推理能力而廣受贊譽。饒是如此,卻并不原生支持函數調用(function_call),這是開發過程中不可或缺的一部分。雖有第三方調校的模型支持,然終非官方自帶,還需假以時日。本文雖然簡短,應該是全網寫得最通透的了吧。 …

SQLMesh系列教程:基于指標構建一致的分析語義層應用實踐

本文深入探討SQLMesh指標框架的核心概念、定義方法及應用場景。通過統一的語義層管理,SQLMesh解決了數據分析中指標定義不一致的痛點,實現了跨團隊協作的數據一致性。文章包含指標定義語法詳解、自動表連接機制解析、派生指標構建方法,并通過…

基于OpenCV+MediaPipe手部追蹤

一、技術棧 1. OpenCV(Open Source Computer Vision Library) 性質:開源計算機視覺庫(Library) 主要功能: 圖像/視頻的基礎處理(讀取、裁剪、濾波、色彩轉換等) 特征檢測&#xf…

機器學習ML極簡指南

機器學習是現代AI的核心,從推薦系統到自動駕駛,無處不在。但每個智能應用背后,都離不開那些奠基性的模型。本文用最簡練的方式拆解核心機器學習模型,助你面試時對答如流,穩如老G。 線性回歸 線性回歸試圖通過"最…

裝飾器模式:如何用Java打扮一個對象?

引言裝飾器模式具體實例共有接口類具體被裝飾類抽象裝飾器類具體裝飾器類 測試裝飾器模式的實際應用Java I/O 體系游戲開發中的角色裝備系統 總結 引言 在生活中,我們都知道一句話,“人靠衣裝馬靠鞍”,如果想要讓自己在別人眼里看起來更加好…

【Easylive】HikariCP 介紹

【Easylive】項目常見問題解答(自用&持續更新中…) 匯總版 HikariCP 是目前 Java 生態中最快、最輕量級的高性能 JDBC 連接池,被 Spring Boot 2.x 及更高版本選為 默認數據庫連接池。它的名字來源于日語“光”(Hikari&#xf…

清晰易懂的Cursor實現AI編程從安裝到實戰TodoList開發

一、Cursor簡介與安裝部署 什么是Cursor? Cursor是一款基于AI的智能代碼編輯器,它集成了強大的AI編程助手功能,能夠通過自然語言交互幫助開發者生成、優化和調試代碼。與傳統的代碼編輯器不同,Cursor可以理解你的編程意圖&#…

【Django】教程-2-前端-目錄結構介紹

【Django】教程-1-安裝創建項目目錄結構介紹 3. 前端文件配置 3.1 目錄介紹 在app下創建static文件夾, 是根據setting中的配置來的 STATIC_URL ‘static/’ templates目錄,編寫HTML模板(含有模板語法,繼承,{% static ‘xx’ …

注意!ChatGPT 全新 AI 圖像功能延遲對免費用戶開放

2025 年 3 月 25 日,OpenAI 正式宣布在 ChatGPT 中推出基于 GPT-4o 模型的全新原生圖像生成功能。 這一功能允許用戶通過對話生成和編輯圖像,支持從寫實風格到插圖風格的多種形式。OpenAI 首席執行官薩姆?奧特曼(Sam Altman)在社…

優化webpack打包體積思路

Webpack 打包過大的問題通常會導致頁面加載變慢,影響用戶體驗。可以從代碼優化、依賴優化、構建優化等多個角度入手來減少打包體積: 代碼優化 (1)按需加載(代碼拆分) ① 路由懶加載 如果你的項目使用 Vu…

HarmonyOS Next~鴻蒙元服務開發指南:核心功能與實踐

HarmonyOS Next~鴻蒙元服務開發指南:核心功能與實踐 一、元服務核心概念 原子化服務定義 元服務(原子服務)是鴻蒙系統的核心架構單元,具備獨立業務能力的輕量化服務模塊,支持免安裝、跨設備調用和智能分發…

git錯誤:fatal: detected dubious ownership in repository at xxxxxx

1、報錯說明 這個錯誤通常是由于Git倉庫目錄的擁有者或權限問題引起的。Git檢測到倉庫目錄的所有權可能存在不一致或不安全的情況。 通常導致此報錯的可能原因: (1)文件或目錄的擁有者不一致: 倉庫目錄中的某些文件或子目錄可能…

【計算機網絡】OSI七層模型完全指南:從比特流到應用交互的逐層拆解

OSI模型 導讀一、概念二、模型層次結構2.1 物理層(Physical Layer)2.2 數據鏈路層(Data Link Layer)?2.3 ?網絡層(Network Layer)?2.4 ?傳輸層(Transport Layer)?2.5 ?會話層&…

零基礎被迫參加CTF比賽?CTF高頻解題技巧與經驗分享

CTF(Capture The Flag)比賽中的高頻解題技巧通常涵蓋了以下幾類技術,涉及從逆向工程、二進制漏洞利用到Web安全、密碼學等多個領域。以下是一些高頻解題技巧: 1. 逆向工程(Reverse Engineering) 靜態分析&a…

markdown 文件轉 word

將 Markdown 文件轉換為 Word 文檔,可以使用多種方法。以下是幾種常見的方法: 方法1:使用在線轉換工具 有許多在線服務可以將 Markdown 文件轉換為 Word 文檔。例如: Pandoc - 一個非常流行的命令行工具,也可以用來轉…

【第十三屆“泰迪杯”數據挖掘挑戰賽】【2025泰迪杯】【思路篇】A題解題全流程(持續更新)

【第十三屆“泰迪杯”數據挖掘挑戰賽】【2025泰迪杯】A題解題全流程-思路(持續更新) 寫在前面: 1、A題、C題將會持續更新,陸續更新發布文章 2、賽題交流咨詢Q群:1037590285 3、全家桶依舊包含: 代碼、…

T11 TensorFlow入門實戰——優化器對比實驗

🍨 本文為🔗365天深度學習訓練營 中的學習紀錄博客🍖 原作者:K同學啊 | 接輔導、項目定制 一、前期準備 1. 導入數據 # Import the required libraries import pathlib import matplotlib.pyplot as plt import tensorflow as t…

Docker部署sprintboot后端項目

創建Docker網絡 docker network create icjs 部署Redis docker run -d \--network icjs \--name redis \-p 6379:6379 \redis:latest數據持久化 docker run --restartalways --network icjs -p 6379:6379 --name redis -v /opt/docker/redis/redis.conf:/etc/redis/redis.c…

01小游戲

問題描述 小明得到了一個長度為 nn 的字符串 ss ,該字符串都是由數字 00 和 11 組成,并且下標從 11 開始,小明現在需要對這個字符串進行 qq 次操作,每次操作包含以下兩種操作之一: 操作 11 :小明查詢該字符…