【PyTorch實戰:Tensor變形】5、 PyTorch Tensor指南:從基礎操作到Autograd與GPU加速實戰

在這里插入圖片描述

一、Tensor核心概念解析

1.1 什么是Tensor?

Tensor是PyTorch中最基本的數據結構,也是深度學習框架的核心計算單元。我們可以將Tensor理解為多維數組的統一表示,它在PyTorch中的地位相當于NumPy中的ndarray,但具有兩個關鍵增強特性:GPU加速支持自動求導能力
在這里插入圖片描述

1.2 為什么需要Tensor?

PyTorch重新設計Tensor而不是直接使用NumPy數組,主要基于兩個深度學習的關鍵需求:

  1. GPU加速:深度學習涉及大量并行計算,GPU擁有數千個核心,非常適合處理Tensor這樣的海量數據。Tensor可以輕松在CPU和GPU之間切換,實現計算加速。
  2. 自動求導:神經網絡訓練的核心是計算梯度。Tensor的requires_grad屬性可以標記需要計算梯度的參數,PyTorch的Autograd引擎會自動追蹤所有相關運算并計算梯度。

簡單公式表示:PyTorch Tensor = NumPy Array + GPU Support + Autograd

二、Tensor的創建與數據類型

2.1 基本創建方式

PyTorch提供了多種創建Tensor的方法,與NumPy的API設計高度一致:

import torch
import numpy as np# 從Python列表直接創建
x = torch.tensor([1, 2, 3, 4])
print(f"從列表創建的Tensor: {x}")# 使用內置函數創建特殊Tensor
zeros = torch.zeros(2, 3)    # 創建2x3的全0Tensor
ones = torch.ones(2, 3)      # 創建2x3的全1Tensor
rand_tensor = torch.rand(2, 3)  # 創建2x3的Tensor,元素來自[0,1)均勻分布
randn_tensor = torch.randn(2, 3) # 創建2x3的Tensor,元素來自標準正態分布
arange_tensor = torch.arange(0, 10, 2) # 類似range,tensor([0, 2, 4, 6, 8])
eye_tensor = torch.eye(3)    # 創建3x3的單位矩陣# 指定數據類型和設備創建
special_tensor = torch.tensor([1, 2, 3], dtype=torch.float32, device='cuda' if torch.cuda.is_available() else 'cpu')

2.2 Tensor數據類型詳解

PyTorch Tensor支持多種數據類型,每種類型都有特定的使用場景:

數據類型 對應PyTorch類 說明 常見用途
32位浮點 torch.float32 單精度浮點數 深度學習中最常用的類型
64位浮點 torch.float64 雙精度浮點數 高精度數值計算
16位浮點 torch.float16 半精度浮點數 GPU內存緊張時使用
8位無符號整型 torch.uint8 無符號8位整數 圖像處理(0-255像素值)
8位有符號整型 torch.int8 有符號8位整數 量化模型
32位整型 torch.int32 32位整數 一般整數運算
64位整型 torch.int64 64位整數 索引和標簽(常用)
布爾型 torch.bool 布爾類型 掩碼和條件運算
# 數據類型示例
float_tensor = torch.tensor([1.0, 2.0, 3.0], dtype=torch.float32)
int_tensor = torch.tensor([1, 2, 3], dtype=torch.int64)
bool_tensor = torch.tensor([True, False, True], dtype=torch.bool)# 數據類型轉換
original = torch.tensor([1, 2, 3])  # 默認int64
converted = original.float()        # 轉換為float32
print(f"原始類型: {original.dtype}, 轉換后類型: {converted.dtype}")

2.3 特殊Tensor創建方法

除了基本創建方法,PyTorch還提供了多種特殊Tensor的創建函數:

# 創建與現有Tensor相同形狀的Tensor
example = torch.randn(3, 4)
zeros_like = torch.zeros_like(example)  # 與example形狀相同的全0Tensor
ones_like = torch.ones_like(example)    # 與example形狀相同的全1Tensor
rand_like = torch.rand_like(example)    # 與example形狀相同的隨機Tensor# 創建線性空間Tensor
linear_space = torch.linspace(0, 10, 5)  # tensor([0., 2.5, 5., 7.5, 10.])
log_space = torch.logspace(0, 2, 3)      # tensor([1., 10., 100.])# 創建隨機排列
random_perm = torch.randperm(10)         # 0-9的隨機排列# 創建對角Tensor
diagonal = torch.diag(torch.tensor([1, 2, 3]))  # 對角線為1,2,3的矩陣

三、Tensor屬性詳解

3.1 核心屬性

每個Tensor都有多個重要屬性,用于描述其特征和狀態:

# 創建一個示例Tensor
t = torch.randn(2, 3, 4, requires_grad=True)print("形狀:", t.shape)        # torch.Size([2, 3, 4])
print("維度數:", t.dim())       # 3
print("元素總數:", t.numel())   # 24
print("數據類型:", t.dtype)     # torch.float32
print("設備:", t.device)       # cpu 或 cuda:0
print("是否需要梯度:", t.requires_grad)  # True
print("是否連續存儲:", t.is_contiguous())  # True
print("梯度:", t.grad)         # None (尚未計算梯度)

3.2 設備屬性與GPU加速

Tensor的設備屬性決定了它在何處進行計算,這對于深度學習性能至關重要:

# 檢查GPU可用性
cuda_available = torch.cuda.is_available()
print(f"CUDA可用: {cuda_available}")# 設備無關的代碼編寫方式
device = torch.device("cuda" if cuda_available else "cpu")
print(f"使用設備: {device}")# 創建時指定設備
x = torch.tensor([1, 2, 3], device=device)# 在設備間移動Tensor
if cuda_available:cpu_tensor = torch.ones(3)gpu_tensor = cpu_tensor.to('cuda')  # 移動到GPUback_to_cpu = gpu_tensor.cpu()      # 移回CPU# 使用.to()方法同時改變設備和數據類型transformed = cpu_tensor.to('cuda', dtype=torch.float64)

3.3 梯度追蹤與requires_grad

requires_grad是PyTorch Tensor最獨特的屬性之一,它開啟了自動求導功能:

# 創建需要梯度的Tensor(模型參數)
weights = torch.randn(5, 3, requires_grad=True)
bias = torch.zeros(3, requires_grad=True)# 創建不需要梯度的Tensor(輸入數據)
input_data = torch.randn(10, 5, requires_grad=False)# 前向傳播(自動構建計算圖)
output = input_data @ weights + bias  # 矩陣乘法和加法
loss = output.pow<

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

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

相關文章

2025年我國具身智能產業鏈全景分析

一、具身智能產業概述與定義 1.1 具身智能的基本概念與內涵 具身智能&#xff08;Embodied Intelligence&#xff09;是指通過物理實體與環境進行交互的智能系統&#xff0c;其核心在于將感知、決策和執行緊密結合&#xff0c;使智能體能夠在動態環境中自主感知、學習和執行任務…

VMWare上搭建大數據集群

文章目錄1. 采用軟件較新版本2. 準備三臺虛擬機3. 搭建Hadoop集群3.1 在主節點上配置Hadoop3.1.1 編輯映射文件3.1.2 配置免密登錄3.1.3 配置JDK3.1.4 配置Hadoop3.2 從主節點分發到從節點3.3 格式化名稱節點3.4 啟動Hadoop集群3.5 使用Hadoop WebUI3.6 運行MR應用&#xff1a;…

小迪自用web筆記29

PHP刷新是點擊刷新之后原來的圖片替換掉&#xff0c;換成新的圖片。把inhoneJPG給替換掉如果這個圖片是由用戶可自定義輸入的話&#xff0c;可xss漏洞應用。因為這段代碼本質邏輯是點擊刷新之后。就執行update方法中的代碼&#xff0c;而這個方法中存儲的是。截取IMG&#xff0…

WPS--專業pj版

下載 下載鏈接 解壓后 安裝 默認安裝 激活 輸入解壓后文件中的激活碼

Android Framework智能座艙面試題

目錄 1.談一談你對binder機制的理解?它為什么是Android中最重要的IPC通信方式?與其他IPC(Socket、共享內存)通信方式相比有哪些優勢? 2.如果你需要新提供的車載硬件(比如:一個座椅震動馬達)提供系統級別支持應該怎么做? 3.你了解Android與QNX共存方案的實現方式嗎?他們…

[CISCN2019 華北賽區 Day1 Web1]Dropbox

TRY 首先上傳和刪除文件抓包&#xff0c;可以發現upload.php和delete.php&#xff0c;只允許上傳gif png jpg后綴的文件。但是上傳的文件并沒有辦法訪問&#xff0c;不過可以下載&#xff0c;抓包發現下載的時候請求體是文件名&#xff0c;嘗試能不能通過路徑穿越獲取源碼&…

網站管理后臺

這里套用的模板為 楓雨在線 在寶塔面板左側選擇菜單欄文件 在根目錄下找到www文件夾&#xff0c;點擊進入wwwroot文件夾&#xff0c;隨后能看到域名文件夾&#xff0c;里面有一下初始內容&#xff0c;可以全部刪掉&#xff0c;留下 .user.ini 文件 點擊上傳&#xff0c;將…

一款免費易用且打造的全功能媒體播放器

zyfun[zyplayer]是一款免費易用且打造的全功能媒體播放器, 致力于提供流暢、高效的跨平臺娛樂體驗。 注意&#xff1a;播放源請自行查詢&#xff0c;或者聯系博主。 下載&#xff1a;軟件下載 在線體驗可暫時使用:https://tv.snowytime.cn 密碼為123456 &#x1f389; 功能亮點…

【AI產品思路】AI 原型設計工具橫評:產品經理視角下的 v0、Bolt 與 Lovable

本文原創作者&#xff1a;姚瑞南 AI-agent 大模型運營專家/音樂人/野生穿搭model&#xff0c;先后任職于美團、獵聘等中大廠AI訓練專家和智能運營專家崗&#xff1b;多年人工智能行業智能產品運營及大模型落地經驗&#xff0c;擁有AI外呼方向國家專利與PMP項目管理證書。&#…

計算機視覺(九):圖像輪廓

在計算機視覺&#xff08;Computer Vision, CV&#xff09;中&#xff0c;圖像輪廓&#xff08;Image Contour&#xff09;是圖像中物體邊界的重要表現形式。它不僅能描述物體的形狀特征&#xff0c;還能為目標識別、目標檢測、圖像分割、場景理解、三維重建等任務提供重要依據…

ThinkPHP 6框架常見錯誤:htmlentities()函數參數類型問題解決

在ThinkPHP 6框架中&#xff0c;htmlentities() 函數是一個常用的PHP函數&#xff0c;用于將字符轉換為HTML實體。這個函數通常在輸出內容到瀏覽器時使用&#xff0c;以防止跨站腳本&#xff08;XSS&#xff09;攻擊。然而&#xff0c;在使用過程中可能會遇到參數類型問題。錯誤…

網絡通信 IO 模型學習總結基礎強化

網絡通信概念網絡通信因為要處理復雜的物理信號&#xff0c;錯誤處理等&#xff0c;所以采用了分層設計。為什么要采用分層設計&#xff1f;1. 每層可以獨立開發&#xff0c;測試和替換&#xff1b;2. 發生問題也可以快速定位到具體層次&#xff1b;3. 協議標準化&#xff0c;不…

【ComfyUI】深度 ControlNet 深度信息引導生成

今天給大家演示一個結合 ControlNet 深度信息的 ComfyUI 建筑可視化工作流。整個流程通過引入建筑專用的權重模型和深度控制網絡&#xff0c;使得生成的建筑圖像不僅具備高質量和超寫實的細節&#xff0c;還能精確遵循輸入圖片的結構特征。在這個案例中&#xff0c;模型加載、文…

Python數據可視化科技圖表繪制系列教程(六)

目錄 散點圖1 散點圖2 添加線性回歸線的散點圖 自定義點形狀的散點圖 不同樣式的散點圖 抖動散點圖 邊際圖 邊緣為直方圖的邊際圖 邊緣為箱線圖的邊際圖 曼哈頓圖 【聲明】&#xff1a;未經版權人書面許可&#xff0c;任何單位或個人不得以任何形式復制、發行、出租、…

spring AI 的簡單使用

1. 引入 Spring 官?推出的?個穩定版??智能(AI)集成框架. 旨在幫助 Java/Spring 開發者更便捷地在企業級應?中集成 AI 能? (如?語?模型、機器學習、向量數據庫、圖像?成等)。 它主要提供了以下功能&#xff1a; ? ?持主要的AI模型提供商, ?如 Anthropic、OpenAI、M…

圖像去霧:從暗通道先驗到可學習融合——一份可跑的 PyTorch 教程

一、為什么“去霧”依然是好課題&#xff1f; 真實需求大&#xff1a;手機拍照、自動駕駛、遙感、監控都要在惡劣天氣下成像。 數據集相對干凈&#xff1a;與通用目標檢測相比&#xff0c;去霧只有“有霧/無霧”一對圖像&#xff0c;標注成本低。 傳統與深度并存&#xff1a;…

Ubuntu 22.04.1上安裝MySQL 8.0及設置root密碼

安裝MySQL 8.0 在 Ubuntu 22.04.1 系統需要遵循幾個明確的步驟&#xff0c;并在安裝過程中配置root密碼&#xff0c;以下是詳細的過程和相關的注意事項。步驟 1: 更新系統 使用終端更新系統軟件包列表以確保所有的包是最新的。sudo apt update sudo apt upgrade步驟 2: 安裝MyS…

用?content-visibility?即刻提速:那個被你忽略的 CSS 性能杠桿

我有一支技術全面、經驗豐富的小型團隊&#xff0c;專注高效交付中等規模外包項目&#xff0c;有需要外包項目的可以聯系我&#x1f50d; 引言長頁面、信息密集、滾動遲滯&#xff1f;**content-visibility** 這項相對較新的 CSS 屬性&#xff0c;允許瀏覽器跳過視口外元素的渲…

字符串(2)

4.字符串的常見函數代碼#include <stdio.h> #include <string.h> int main() {char* str1 "abc";char str2[100] "abc";char str3[5] { q,w,e,r ,\0 };printf("---------------------strlen&#xff08;長度&#xff09;-------------…

案例分享|企微智能會話風控系統:為尚豐盈鋁業筑牢溝通安全防線

企微智能會話安全風險分析系統是一款基于企業微信原生集成的高性能處理平臺&#xff0c;其核心在于通過智能監測和AI風險識別技術&#xff0c;對員工與內外部客戶的聊天內容進行多模態分析&#xff08;涵蓋文本、圖片、語音、視頻、文件等多種形式&#xff09;&#xff0c;利用…