tensor

😉如果您想用jupyter notebook跑我的筆記,可以在下面獲取ipynb版本
😊麻煩給個免費的star😘
??主包也更建議這種形式,上面的筆記也更加全面,每一步都有直觀的輸出

文章目錄

  • 📚 PyTorch張量操作與自動微分全面指南
    • 🛠 1. 準備工作
      • 1.1 導入PyTorch并檢查環境
      • 1.2 設置計算設備
    • 📦 1.1 張量初始化
      • 1.1.1 從Python數據類型創建
      • 1.1.2 數據類型處理
      • 1.1.3 從NumPy數組創建
      • 1.1.4 特殊張量創建
      • 1.1.5 張量屬性查看
      • 1.1.6 張量設備轉移
    • ? 1.2 張量運算
      • 1.2.1 基本運算
      • 1.2.2 張量轉換
      • 1.2.3 形狀操作
    • 🔁 1.3 張量自動微分
      • 1.3.1 梯度計算核心概念
      • 1.3.2 梯度計算實戰
      • 1.3.3 梯度控制技巧
    • 💎 核心要點總結

📚 PyTorch張量操作與自動微分全面指南

PyTorch作為深度學習領域的主流框架,掌握其核心數據結構張量(Tensor)的操作至關重要。本文將全面解析PyTorch張量的創建、運算和自動微分機制,助你快速上手PyTorch開發!🚀

🛠 1. 準備工作

1.1 導入PyTorch并檢查環境

# 導入torch庫
import torch# 查看torch版本
print(torch.__version__)  # 輸出: 2.6.0+cu124# 檢查CUDA是否可用
torch.cuda.is_available()  # 輸出: True

1.2 設置計算設備

device = "cuda" if torch.cuda.is_available() else "cpu"
print(device)  # 輸出: cuda

📦 1.1 張量初始化

1.1.1 從Python數據類型創建

data = [[1,2],[3,4]]
x = torch.tensor(data)
print(x)
# 輸出: 
# tensor([[1, 2],
#         [3, 4]])

1.1.2 數據類型處理

# 查看數據類型
print(x.dtype)  # 輸出: torch.int64# 指定數據類型創建
x1 = torch.FloatTensor([[1,2],[3,4]])  # 等價于 torch.tensor(..., dtype=torch.float32)
x2 = torch.LongTensor([[1,2],[3,4]])# 強制類型轉換
x1 = x1.type(torch.long)  # 轉換為int64
x1 = x1.float()           # 轉換為float32

💡 關鍵提示torch.float32torch.int64是最重要的數據類型!模型輸入通常是float32,分類標簽通常是int64

1.1.3 從NumPy數組創建

import numpy as np
data = np.array([[1,2],[4,3]])
x3 = torch.from_numpy(data)
print(x3)
# 輸出:
# tensor([[1, 2],
#         [4, 3]])

1.1.4 特殊張量創建

# 創建隨機張量
rand_tensor = torch.rand(2,3)    # 0~1均勻分布
randn_tensor = torch.randn(2,3)  # 標準正態分布# 創建全1/全0張量
ones_tensor = torch.ones(2,3)
zeros_tensor = torch.zeros(2,3)# 繼承形狀創建
y1 = torch.rand_like(x.float())

1.1.5 張量屬性查看

t = x
print(t.shape)      # 形狀: torch.Size([2, 2])
print(t.size())     # 大小: torch.Size([2, 2])
print(t.dtype)      # 數據類型: torch.int64
print(t.device)     # 存儲設備: cpu

1.1.6 張量設備轉移

x_gpu = x.to(device)  # 轉移到GPU
print(x_gpu.device)   # 輸出: cuda:0

? 1.2 張量運算

1.2.1 基本運算

# 就地加法 (會改變原張量)
t1 = torch.randn(2,3)
t2 = torch.ones(2,3)
t2.add_(t1)# 矩陣乘法
result1 = t1 @ t2.T
result2 = t1.matmul(t2.T)

1.2.2 張量轉換

# 單元素張量轉標量
t3 = t1.sum()
scalar = t3.item()  # 輸出: 2.1050655841827393# 張量轉NumPy數組
numpy_array = t1.numpy()

1.2.3 形狀操作

t = torch.randn(4,6)# 重塑形狀
t1 = t.view(3,8)     # 顯式指定形狀
t2 = t.view(-1,1)    # 自動推斷維度
t3 = t.view(1,4,6)   # 增加維度# 維度壓縮與擴展
t4 = torch.ones(1,4,6)
t5 = torch.squeeze(t4)    # 移除大小為1的維度
t6 = torch.unsqueeze(t5,0)  # 在指定位置添加維度

🔁 1.3 張量自動微分

1.3.1 梯度計算核心概念

PyTorch的自動微分系統基于以下三個關鍵屬性:

  • requires_grad:是否跟蹤梯度(默認為False)
  • grad:存儲計算得到的梯度
  • grad_fn:指向生成此張量的運算方法

1.3.2 梯度計算實戰

# 創建需要跟蹤梯度的張量
t = torch.ones(2,2, requires_grad=True)
print(t.requires_grad)  # 輸出: True# 構建計算圖
y = t + 5
x = y * 2
out = x.mean()# 反向傳播計算梯度
out.backward()# 查看梯度
print(t.grad)
# 輸出:
# tensor([[0.5000, 0.5000],
#         [0.5000, 0.5000]])

1.3.3 梯度控制技巧

# 臨時禁用梯度跟蹤
with torch.no_grad():print((t + 2).requires_grad)  # 輸出: False# 獲取不跟蹤梯度的張量副本
detached_t = t.detach()
print(detached_t.requires_grad)  # 輸出: False# 永久關閉梯度跟蹤
t.requires_grad_(False)
print(t.requires_grad)  # 輸出: False

💎 核心要點總結

  1. 張量創建

    • 使用torch.tensor()從Python數據創建
    • 使用torch.from_numpy()從NumPy數組轉換
    • 掌握torch.rand(), torch.randn(), torch.ones(), torch.zeros()等創建方法
  2. 數據類型管理

    • 重點掌握float32(模型輸入)和int64(分類標簽)
    • 使用.float().long()快速轉換類型
  3. 設備轉移

    • 使用.to(device)在CPU/GPU間移動張量
    • 始終檢查tensor.device確保張量位置正確
  4. 自動微分

    • 設置requires_grad=True啟用梯度跟蹤
    • 使用.backward()自動計算梯度
    • 使用with torch.no_grad():上下文管理器禁用梯度計算
  5. 性能優化

    • 盡量使用就地操作(如add_())減少內存開銷
    • 合理使用view()進行形狀重塑
    • 及時使用detach()分離不需要的計算圖

掌握這些PyTorch張量核心操作,你已為深度學習模型開發打下堅實基礎!🎯 下一步可以探索神經網絡模塊和優化器的使用,開啟模型訓練之旅!

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

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

相關文章

STM32-DAC數模轉換

DAC數模轉換:將數字信號轉換成模擬信號特性:2個DAC轉換器每個都擁有一個轉換通道8位或12位單調輸出(8位右對齊;12位左對齊右對齊)雙ADC通道同時或者分別轉換外部觸發中斷電壓源控制部分(外部觸發3個APB1&am…

前后端集合如何傳遞

前端vue后端rest風格&#xff1a;1.路徑傳參&#xff08;參數必傳&#xff09;&#xff0c;通過pathvarible注解后端&#xff1a;DeleteMapping("/{YYIDs}")public R<Void> remove(NotEmpty(message "主鍵不能為空")PathVariable String[] YYIDs) {…

1353. 最多可以參加的會議數目

1353. 最多可以參加的會議數目 題目鏈接&#xff1a;1353. 最多可以參加的會議數目 代碼如下&#xff1a; class Solution { public:int maxEvents(vector<vector<int>>& events) {int mx 0;for (auto& e : events) {mx max(mx, e[1]); // 找到最大的結…

OCR 本地版本

UMI OCR 支持本地部署&#xff0c;支持HTTP OCR

大數據驅動的酒店用品需求預測模型研究 開發——畢業論文,畢業設計——仙盟創夢IDE

主頁酒店用品 平臺協議促銷畢業論文摘要本研究旨在構建基于大數據分析的酒店用品需求預測模型&#xff0c;以提高酒店用品批發企業的庫存管理效率和供應鏈響應速度。研究整合了酒店歷史采購數據、季節因素、市場趨勢、節假日信息等多源數據&#xff0c;通過對比傳統時間序列模型…

Windows11桌面解鎖守護腳本

使用python程序加bat一鍵運行腳本&#xff0c;媽媽再也不用擔心我的電腦桌面了import os import time import cv2 import pyautogui import psutil from datetime import datetimeclass UnlockMonitor:def __init__(self):"""初始化監控器"""sel…

Linux Ubuntu系統的用戶管理

一.關于root用戶默認我們安裝完系統后 注冊的用戶就是管理員用戶標識符 $ 管理員標識符#最高管理員在Ubuntu系統中,root是最高管理員,擁有最大的權限,默認情況下root用戶沒有啟用密碼,而是通過sudo機制來獲取管理員權限二.Ubuntu系統中root用戶的默認狀態root用戶存在,但未啟用…

ROS1學習第三彈

ROS1學習第二彈 本文純屬記錄學習過程&#xff0c;所學教程來自B站古月居ROS入門21講 tf工具的使用 命令行中 1.rosrun tf view_frames 生成當前各個坐標的結構圖&#xff0c;導出pdf文件到當前終端所在文件夾下面2.rosrun rviz rviz -d rospackage find turtle_tf /rviz/tu…

技術演進中的開發沉思-30 MFC系列:五大機制

MFC&#xff0c;記得我剛畢業時在 CRT 顯示器前敲下第一行 MFC 代碼時&#xff0c;那時什么都不懂&#xff0c;沒有框架的概念。只覺得眼前的 CObject 像位沉默且復雜的大家族&#xff0c; 就像老北京胡同里的大家族&#xff0c;每個門牌號都藏著自己的故事。但現在看看&#x…

機器學習-06(Optimization-自動調整學習率)

臨界點其實不一定是在訓練神經網絡過程中遇到的最大阻礙。隨著對參數的不斷更新&#xff0c;Loss值會不斷下降&#xff0c;直至幾乎沒有變化&#xff0c;不再下降。當參數更新到臨界點時&#xff0c;意味著gradient非常小&#xff0c;所以要認定參數是否到達臨界點應當確認grad…

Uniapp中的uni.scss

uni.scss為uni-app新建項目自帶工程文件&#xff0c;使用的預處理器為sass/scss&#xff0c;由此可見&#xff0c;uni-app官方推薦的是scss。 uni.scss特點 無需引入&#xff0c;uni-app在編譯時&#xff0c;會自動引入此文件在此中定義的scss變量&#xff0c;可以全局使用&…

PreparedStatement 實現分頁查詢詳解

PreparedStatement 實現分頁查詢詳解 在 JDBC 中使用 PreparedStatement 實現分頁查詢是高效安全的方式&#xff0c;可以避免 SQL 注入并提升性能。下面我將詳細說明實現步驟和原理。 &#x1f4d0; 分頁查詢核心參數參數名說明計算公式pageNum當前頁碼&#xff08;從1開始&…

ClamAV 和 FreshClam:Linux 服務器上的開源殺毒解決方案

ClamAV 和 FreshClam:Linux 服務器上的開源殺毒解決方案 1. 概述 ClamAV 是一款開源的防病毒引擎,專為 Linux 服務器設計,用于檢測惡意軟件、病毒、木馬和其他安全威脅。它廣泛應用于郵件服務器、文件存儲系統和 Web 服務器,提供高效的病毒掃描功能。 主要特點: 免費開…

PySpark中python環境打包和JAR包依賴

在 PySpark 中打包 Python 環境并調度到集群是處理依賴一致性的關鍵步驟。以下是完整的解決方案&#xff0c;包含環境打包、分發和配置方法&#xff1a; 一、環境打包方法 使用 Conda 打包環境 # 創建 Conda 環境 conda create -n pyspark_env python3.8 conda activate pyspar…

和鯨社區深度學習基礎訓練營2025年關卡2(1)純numpy

擬分3種實現方法&#xff1a;1.純numpy2.sklearn中的MLPClassifier3.pytorch題目&#xff1a; 在 MNIST 數據集上訓練 MLP 模型并比較不同的激活函數和優化算法任務描述&#xff1a;使用 MNIST 數據集中的前 20,000 個樣本訓練一個多層感知機 (MLP) 模型。你需要比較三種不同的…

Sequential Thinking:AI深度思考的新范式及其與CoT、ReAct的對比分析

引言&#xff1a;AI深度思考的演進與Sequential Thinking的崛起在人工智能技術快速發展的今天&#xff0c;AI模型的思考能力正經歷著從簡單應答到深度推理的革命性轉變。這一演進過程不僅反映了技術本身的進步&#xff0c;更體現了人類對機器智能認知邊界的持續探索。早期的大語…

云原生詳解:構建現代化應用的未來

引言 在數字化轉型的浪潮中,"云原生"已成為技術領域最熱門的話題之一。從初創公司到全球500強企業,都在積極探索云原生技術以提升業務敏捷性和創新能力。本文將全面解析云原生的概念、核心技術、優勢以及實踐路徑,幫助您深入理解這一改變IT格局的技術范式。 什么…

SSE事件流簡單示例

文章目錄1、推送-SseEmitter2、接收-EventSourceListenerSSE&#xff08;Server-Sent Events&#xff0c;服務器推送事件&#xff09;是一種基于HTTP的服務器向客戶端實時推送數據的技術標準。1、推送-SseEmitter SseEmitter用于實現服務器向客戶端單向、長連接的實時數據推送…

Elasticsearch RESTful API入門:基礎搜索與查詢DSL

Elasticsearch RESTful API入門&#xff1a;基礎搜索與查詢DSL 本文為Elasticsearch初學者詳細解析RESTful API的核心操作與查詢DSL語法&#xff0c;包含大量實戰示例及最佳實踐。 一、Elasticsearch與RESTful API簡介 Elasticsearch&#xff08;ES&#xff09;作為分布式搜索…

(六)復習(OutBox Message)

文章目錄 項目地址一、OutBox Message1.1 OutBox表配置1. OutBoxMessage類2. OutboxMessage表配置3. 給每個模塊生成outboxmessage表1.2 發布OutBox Message1. 修改Intercepotor2. 配置Quartz3. 創建Quatz方法發布領域事件4. 創建Quatz定時任務5. 注冊Quatz服務和配置6. 流程梳…