PyTorch使用-張量的創建

文章目錄

  • 張量的創建
  • 1. 安裝 PyTorch
  • 2. 基本創建方式
    • 2.1 torch.tensor 根據指定數據創建張量
    • 2.2. torch.Tensor 根據形狀創建張量, 其也可用來創建指定數據的張量
    • 2.3. 指定類型的張量創建
      • 2.3.1. torch.IntTensor:創建整數類型張量
      • 2.3.2. torch.FloatTensor:創建浮點類型張量
      • 2.3.3. torch.DoubleTensor:創建雙精度浮點類型張量
    • 2.4. 指定數據類型的其他方式
    • 2.5. 總結
  • 3. 創建線性和隨機張量
    • 3.1 創建線性張量
      • 3.1.1. torch.arange:創建等間隔的整數張量
      • 3.1.2. torch.linspace:創建等間隔的浮點數張量
    • 3.2. 隨機種子設置
      • 3.2.1 torch.random.manual_seed:設置隨機種子
    • 3.3. 創建隨機張量
      • 3.3.1. torch.randn:創建標準正態分布的隨機張量
      • 3.3.2. torch.rand:創建均勻分布的隨機張量
      • 3.3.3. torch.randint:創建整數隨機張量
      • 3.4. 總結
  • 4. 創建全 0\1 張量
    • 4.1. 創建全1 張量
      • 4.1.1. torch.ones:創建全 1 張量
      • 4.1.2. torch.ones_like:創建與輸入張量形狀相同的全 1 張量
    • 4.2. 創建全 0 張量
      • 4.2.1. torch.zeros:創建全 0 張量
      • 4.2.2. torch.zeros_like:創建與輸入張量形狀相同的全 0 張量
    • 4.3. 創建全為指定值的張量
      • 4.3.1. torch.full:創建全為指定值的張量
      • 4.3.2. torch.full_like:創建與輸入張量形狀相同的全為指定值的張量
      • 4.4. 總結
  • 5. 張量元素類型轉換
    • 5.1. 使用 tensor.type() 方法
    • 5.2. 使用 tensor.double() 方法
    • 5.3. 其他類型轉換方法
    • 5.4. 使用 tensor.to() 方法
      • 5.4.1. 轉換數據類型
      • 5.4.2. 同時轉換設備和數據類型
    • 5.5. 總結

張量的創建

PyTorch 是一個廣泛使用的開源深度學習框架,由 Facebook 的 AI 研究團隊開發,并以其靈活性和易于使用的特性而受到許多研究者和開發者的喜愛。它將數據封裝成張量(Tensor)來進行運算。PyTorch 中的張量就是元素為同一種數據類型的多維矩陣。在 PyTorch 中,張量以 “類” 的形式封裝起來,對張量的一些運算、處理的方法被封裝在類中。

1. 安裝 PyTorch

首先,確保你已經安裝了 PyTorch。你可以通過 Python 的包管理器 pip 來安裝它:

pip install torch torchvision

2. 基本創建方式

torch.IntTensor、torch.FloatTensor、torch.DoubleTensor 創建指定類型的張量

2.1 torch.tensor 根據指定數據創建張量

torch.tensor 是直接從數據(如列表、元組等)創建張量的方法。它會根據輸入的數據推斷數據類型(dtype)。

import torch
# 從列表創建張量
data = [1, 2, 3, 4]
x = torch.tensor(data)
print(x)
print(x.dtype)  # 默認推斷為 torch.int64
程序輸出:
tensor([1, 2, 3, 4])
torch.int64

2.2. torch.Tensor 根據形狀創建張量, 其也可用來創建指定數據的張量

torch.Tensor 是一個類,可以用來創建未初始化的張量。它接受形狀(shape)作為參數,返回一個未初始化的張量。

# 創建一個 2x3 的未初始化張量
x = torch.Tensor(2, 3)
print(x)

輸出:

tensor([[1.4013e-45, 0.0000e+00, 1.4013e-45],[0.0000e+00, 1.4013e-45, 0.0000e+00]])

注意:torch.Tensor 也可以用來創建指定數據的張量,但不推薦這種方式,因為它的行為不如 torch.tensor 直觀。

# 不推薦:從列表創建張量
data = [1, 2, 3, 4]
x = torch.Tensor(data)
print(x)

輸出:

tensor([1., 2., 3., 4.])

2.3. 指定類型的張量創建

PyTorch 提供了多種數據類型(dtype),可以通過以下方式創建指定類型的張量:

2.3.1. torch.IntTensor:創建整數類型張量

# 創建一個 2x2 的整數類型張量
x = torch.IntTensor([[1, 2], [3, 4]])
print(x)
print(x.dtype)  # torch.int32

輸出:

tensor([[1, 2],[3, 4]], dtype=torch.int32)
torch.int32

2.3.2. torch.FloatTensor:創建浮點類型張量

# 創建一個 2x2 的浮點類型張量
x = torch.FloatTensor([[1, 2], [3, 4]])
print(x)
print(x.dtype)  # torch.float32

輸出:

ensor([[1., 2.],[3., 4.]])
torch.float32

2.3.3. torch.DoubleTensor:創建雙精度浮點類型張量

# 創建一個 2x2 的雙精度浮點類型張量
x = torch.DoubleTensor([[1, 2], [3, 4]])
print(x)
print(x.dtype)  # torch.float64

輸出:

tensor([[1., 2.],[3., 4.]], dtype=torch.float64)
torch.float64

2.4. 指定數據類型的其他方式

除了使用 torch.IntTensor、torch.FloatTensor 等,還可以通過 dtype 參數直接指定數據類型。

# 創建一個 2x2 的浮點類型張量
x = torch.tensor([[1, 2], [3, 4]], dtype=torch.float32)
print(x)
print(x.dtype)  # torch.float32

輸出:

tensor([[1., 2.],[3., 4.]])
torch.float32

2.5. 總結

方法用途
torch.tensor(data)根據數據創建張量,自動推斷數據類型。
torch.Tensor(shape)根據形狀創建未初始化的張量。
torch.IntTensor(data)創建整數類型(torch.int32)的張量。
torch.FloatTensor(data)創建浮點類型(torch.float32)的張量。
torch.DoubleTensor(data)創建雙精度浮點類型(torch.float64)的張量。
torch.tensor(data, dtype=…)創建指定數據類型的張量(推薦,更直觀且靈活)。

3. 創建線性和隨機張量

3.1 創建線性張量

3.1.1. torch.arange:創建等間隔的整數張量

torch.arange 用于創建一個從起始值到結束值(不包括結束值)的等間隔整數張量。

import torch
# 創建一個從 0 到 9 的張量
x = torch.arange(10)
print(x)

輸出:

tensor([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])

可以指定起始值、結束值和步長:

# 創建一個從 2 到 8,步長為 2 的張量
x = torch.arange(2, 10, 2)
print(x)

輸出:

tensor([2, 4, 6, 8])

3.1.2. torch.linspace:創建等間隔的浮點數張量

torch.linspace 用于創建一個從起始值到結束值的等間隔浮點數張量,可以指定元素的數量。

# 創建一個從 0 到 1 的 5 個等間隔元素的張量
x = torch.linspace(0, 1, 5)
print(x)

輸出:

tensor([0.0000, 0.2500, 0.5000, 0.7500, 1.0000])

3.2. 隨機種子設置

為了保證隨機實驗的可重復性,可以設置隨機種子。

3.2.1 torch.random.manual_seed:設置隨機種子

# 設置隨機種子
torch.random.manual_seed(42)
# 創建一個隨機張量
x = torch.randn(2, 2)
print(x)

輸出:

tensor([[ 0.3367,  0.1288],[ 0.2345,  0.2303]])

注:每次運行代碼時,生成的隨機張量都會相同。

3.3. 創建隨機張量

3.3.1. torch.randn:創建標準正態分布的隨機張量

torch.randn 用于創建服從標準正態分布(均值為 0,方差為 1)的隨機張量。

# 創建一個 2x2 的標準正態分布隨機張量
x = torch.randn(2, 2)
print(x)

輸出:

tensor([[-0.4032,  0.8380],[-1.3886, -0.2935]])

3.3.2. torch.rand:創建均勻分布的隨機張量

torch.rand 用于創建在 [0, 1) 區間內均勻分布的隨機張量。

# 創建一個 2x2 的均勻分布隨機張量
x = torch.rand(2, 2)
print(x)

輸出:

tensor([[0.1234, 0.5678],[0.9101, 0.2345]])

3.3.3. torch.randint:創建整數隨機張量

torch.randint 用于創建指定范圍內的整數隨機張量。

# 創建一個 2x2 的隨機整數張量,范圍在 [0, 10)
x = torch.randint(0, 10, (2, 2))
print(x)

輸出:

tensor([[3, 7],[2, 5]])

3.4. 總結

方法用途
torch.arange(start, end, step)創建等間隔的整數張量。
torch.linspace(start, end, steps)創建等間隔的浮點數張量。
torch.random.manual_seed(seed)設置隨機種子,確保實驗可重復。
torch.randn(shape)創建標準正態分布的隨機張量。
torch.rand(shape)創建 [0, 1) 區間內均勻分布的隨機張量。
torch.randint(low, high, shape)創建指定范圍內的整數隨機張量。

4. 創建全 0\1 張量

4.1. 創建全1 張量

4.1.1. torch.ones:創建全 1 張量

torch.ones 用于創建指定形狀的全 1 張量。

import torch# 創建一個 2x3 的全 1 張量
x = torch.ones(2, 3)
print(x)

輸出:

tensor([[1., 1., 1.],[1., 1., 1.]])

4.1.2. torch.ones_like:創建與輸入張量形狀相同的全 1 張量

torch.ones_like 用于創建一個與輸入張量形狀相同的全 1 張量。

# 創建一個與 x 形狀相同的全 1 張量
y = torch.ones_like(x)
print(y)

輸出:

tensor([[1., 1., 1.],[1., 1., 1.]])

4.2. 創建全 0 張量

4.2.1. torch.zeros:創建全 0 張量

torch.zeros 用于創建指定形狀的全 0 張量。

# 創建一個 2x3 的全 0 張量
x = torch.zeros(2, 3)
print(x)

輸出:

tensor([[0., 0., 0.],[0., 0., 0.]])

4.2.2. torch.zeros_like:創建與輸入張量形狀相同的全 0 張量

torch.zeros_like 用于創建一個與輸入張量形狀相同的全 0 張量。

# 創建一個與 x 形狀相同的全 0 張量
y = torch.zeros_like(x)
print(y)

輸出:

tensor([[0., 0., 0.],[0., 0., 0.]])

4.3. 創建全為指定值的張量

4.3.1. torch.full:創建全為指定值的張量

torch.full 用于創建指定形狀且所有元素為指定值的張量。

# 創建一個 2x3 的全為 5 的張量
x = torch.full((2, 3), 5)
print(x)

輸出:

tensor([[5, 5, 5],[5, 5, 5]])

4.3.2. torch.full_like:創建與輸入張量形狀相同的全為指定值的張量

torch.full_like 用于創建一個與輸入張量形狀相同且所有元素為指定值的張量。

# 創建一個與 x 形狀相同的全為 10 的張量
y = torch.full_like(x, 10)
print(y)

輸出:

tensor([[10, 10, 10],[10, 10, 10]])

4.4. 總結

方法用途
torch.ones(shape)創建指定形狀的全 1 張量。
torch.ones_like(input)創建與輸入張量形狀相同的全 1 張量。
torch.zeros(shape)創建指定形狀的全 0 張量。
torch.zeros_like(input)創建與輸入張量形狀相同的全 0 張量。
torch.full(shape, value)創建指定形狀且所有元素為指定值的張量。
torch.full_like(input, value)創建與輸入張量形狀相同且所有元素為指定值的張量。

5. 張量元素類型轉換

5.1. 使用 tensor.type() 方法

tensor.type() 方法可以將張量轉換為指定的類型。

import torch# 創建一個浮點類型的張量
x = torch.tensor([1.0, 2.0, 3.0])
print(x.dtype)  # 默認是 torch.float32# 轉換為雙精度浮點類型 (torch.float64)
x_double = x.type(torch.DoubleTensor)
print(x_double)
print(x_double.dtype)

輸出:

torch.float32
tensor([1., 2., 3.], dtype=torch.float64)
torch.float64

5.2. 使用 tensor.double() 方法

tensor.double() 是 tensor.type(torch.DoubleTensor)
的簡寫形式,用于將張量轉換為雙精度浮點類型(torch.float64)。

# 轉換為雙精度浮點類型
x_double = x.double()
print(x_double)
print(x_double.dtype)

輸出:

tensor([1., 2., 3.], dtype=torch.float64)
torch.float64

5.3. 其他類型轉換方法

PyTorch 提供了多種類型轉換方法,類似于 tensor.double(),可以直接調用:

方法轉換為的類型
tensor.float()torch.float32
tensor.double()torch.float64
tensor.half()torch.float16
tensor.int()torch.int32
tensor.long()torch.int64
tensor.short()torch.int16
tensor.byte()torch.uint8
tensor.bool()torch.bool
示例:
# 創建一個浮點類型的張量
x = torch.tensor([1.0, 2.0, 3.0])# 轉換為整型
x_int = x.int()
print(x_int)
print(x_int.dtype)# 轉換為布爾型
x_bool = x.bool()
print(x_bool)
print(x_bool.dtype)

輸出:

tensor([1, 2, 3], dtype=torch.int32)
torch.int32
tensor([True, True, True])
torch.bool

5.4. 使用 tensor.to() 方法

tensor.to() 是一個更通用的方法,可以用于設備(CPU/GPU)和類型的轉換。

5.4.1. 轉換數據類型

# 轉換為雙精度浮點類型
x_double = x.to(torch.float64)
print(x_double)
print(x_double.dtype)

輸出:

tensor([1., 2., 3.], dtype=torch.float64)
torch.float64

5.4.2. 同時轉換設備和數據類型

# 轉換為 GPU 上的雙精度浮點類型
if torch.cuda.is_available():x_gpu = x.to(device='cuda', dtype=torch.float64)print(x_gpu)print(x_gpu.dtype)

5.5. 總結

方法用途
tensor.type(torch.DoubleTensor)將張量轉換為指定類型(如 torch.float64)。
tensor.double()將張量轉換為雙精度浮點類型(torch.float64)。
tensor.float()將張量轉換為單精度浮點類型(torch.float32)。
tensor.int()將張量轉換為整型(torch.int32)。
tensor.to(dtype=…)通用方法,支持設備轉換和類型轉換。

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

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

相關文章

基于asp.net實現的連鎖餐廳收銀系統[包運行成功+永久免費答疑輔導]

基于ASP.NET實現的連鎖餐廳收銀系統背景,可以從以下幾個方面進行闡述: 一、技術背景 ASP.NET框架的普及與優勢: ASP.NET是微軟開發的一種用于構建Web應用程序的框架,它基于.NET Framework,提供了豐富的類庫和開發工具…

PyTorch 深度學習實戰(11):強化學習與深度 Q 網絡(DQN)

在之前的文章中,我們介紹了神經網絡、卷積神經網絡(CNN)、循環神經網絡(RNN)、Transformer 等多種深度學習模型,并應用于圖像分類、文本分類、時間序列預測等任務。本文將介紹強化學習的基本概念&#xff0…

92.HarmonyOS NEXT開發學習路徑與最佳實踐總結:構建高質量應用

溫馨提示:本篇博客的詳細代碼已發布到 git : https://gitcode.com/nutpi/HarmonyosNext 可以下載運行哦! HarmonyOS NEXT開發學習路徑與最佳實踐總結:構建高質量應用 文章目錄 HarmonyOS NEXT開發學習路徑與最佳實踐總結:構建高質…

HarmonyOS-應用程序框架基礎

應用程序框架與應用模型的區別 應用框架可以看做是應用模型的一種實現方式,開發人員可以用應用模型來描述應用程序的結構和行為的描述,然后使用應用程序框架來實現這些描述。 應用模型 應用模型是一個應用程序的模型,它是一種抽象的描述&a…

審批工作流系統xFlow

WorkFlow-審批流程系統 該項目為完全開源免費項目 可用于學習或搭建初始化審批流程系統 希望有用的小伙伴記得點個免費的star gitee倉庫地址 仿釘釘飛書工作審批流系統 介紹 前端技術棧: vue3 ts vite arcodesign eslint 后端技術棧:springbootspring mvc mybatis mavenmysq…

數據傳輸對象 DTO

1. DTO 數據傳輸對象(DTO, Data Transfer Object)是一種設計模式,用于在不同系統或應用層之間封裝和傳輸數據。它通常用于解耦領域模型(如數據庫實體)和外部接口(如API請求/響應),避…

本地算力部署大模型詳細流程(二)

1、前景回顧 上一篇我們通過ollama本地部署了一個DeepSeek,因為沒有前端操作頁面,我們只能使用cmd的方式和deepseek對話體驗感并不是很好,下面我們通過Docker部署一個前端頁面(Open WebUI) Open WebUI地址:…

django+vue3實現前后端大文件分片下載

效果: 大文件分片下載支持的功能: 展示目標文件信息提高下載速度:通過并發請求多個塊,可以更有效地利用網絡帶寬斷點續傳:支持暫停后從已下載部分繼續,無需重新開始錯誤恢復:單個塊下載失敗只…

matlab中如何集成使用python

在 MATLAB 中集成使用 Python 可以通過調用 Python 腳本或函數來實現。MATLAB 提供了 py 模塊來直接調用 Python 代碼。以下是一個簡單的示例,展示如何在 MATLAB 中調用 Python 函數。 示例:在 MATLAB 中調用 Python 函數 1. 編寫 Python 函數 首先&a…

ICMP、UDP以及IP、ARP報文包的仲裁處理

在之前的章節中,筆者就UDP、ICMP、IP、ARP、MAC層以及巨型幀等做了詳細介紹以及代碼實現及仿真,從本章節開始,筆者將就各個模塊組合在一起,實現UDP協議棧的整體收發,在實現模塊的整體組合之前,還需要考慮一…

【大模型學習】第十九章 什么是遷移學習

目錄 1. 遷移學習的起源背景 1.1 傳統機器學習的問題 1.2 遷移學習的提出背景 2. 什么是遷移學習 2.1 遷移學習的定義 2.2 生活實例解釋 3. 技術要點與原理 3.1 遷移學習方法分類 3.1.1 基于特征的遷移學習(Feature-based Transfer) 案例說明 代碼示例 3.1.2 基于…

基于大模型的分泌性中耳炎全流程預測與治療管理研究報告

目錄 一、引言 1.1 研究背景與意義 1.2 研究目的與目標 1.3 研究方法與創新點 二、分泌性中耳炎概述 2.1 疾病定義與特征 2.2 發病原因與機制 2.3 疾病危害與影響 三、大模型技術原理與應用現狀 3.1 大模型基本原理 3.2 在醫療領域的應用案例 3.3 選擇大模型預測分…

【NLP 38、實踐 ⑩ NER 命名實體識別任務 Bert 實現】

去做具體的事,然后穩穩托舉自己 —— 25.3.17 數據文件: 通過網盤分享的文件:Ner命名實體識別任務 鏈接: https://pan.baidu.com/s/1fUiin2um4PCS5i91V9dJFA?pwdyc6u 提取碼: yc6u --來自百度網盤超級會員v3的分享 一、配置文件 config.py …

藍橋杯學習-11棧

11棧 先進后出 例題–藍橋19877 用數組來設置棧 1.向棧頂插入元素--top位置標記元素 2.刪除棧頂元素--top指針減減 3.輸出棧頂元素--輸出top位置元素使用arraylist import java.util.ArrayList; import java.util.Scanner;public class Main {public static void main(Str…

Linux 藍牙音頻軟件棧實現分析

Linux 藍牙音頻軟件棧實現分析 藍牙協議棧簡介藍牙控制器探測BlueZ 插件系統及音頻插件藍牙協議棧簡介 藍牙協議棧是實現藍牙通信功能的軟件架構,它由多個層次組成,每一層負責特定的功能。藍牙協議棧的設計遵循藍牙標準 (由藍牙技術聯盟,Bluetooth SIG 定義),支持多種藍牙…

JetBrains(全家桶: IDEA、WebStorm、GoLand、PyCharm) 2024.3+ 2025 版免費體驗方案

JetBrains(全家桶: IDEA、WebStorm、GoLand、PyCharm) 2024.3 2025 版免費體驗方案 前言 JetBrains IDE 是許多開發者的主力工具,但從 2024.02 版本起,JetBrains 調整了試用政策,新用戶不再享有默認的 30 天免費試用…

1.8PageTable

頁表的作用 虛擬地址空間映射:頁表記錄了進程的虛擬頁號到物理頁號的映射關系。每個進程都有自己的頁表,操作系統為每個進程維護一個獨立的頁表。內存管理:頁表用于實現虛擬內存管理,支持進程的虛擬地址空間和物理地址空間之間的…

Prosys OPC UA Gateway:實現 OPC Classic 與 OPC UA 無縫連接

在工業自動化的數字化轉型中,設備與系統之間的高效通信至關重要。然而,許多企業仍依賴于基于 COM/DCOM 技術的 OPC 產品,這給與現代化的 OPC UA 架構的集成帶來了挑戰。 Prosys OPC UA Gateway 正是為解決這一問題而生,它作為一款…

數據結構------線性表

一、線性表順序存儲詳解 (一)線性表核心概念 1. 結構定義 // 數據元素類型 typedef struct person {char name[32];char sex;int age;int score; } DATATYPE;// 順序表結構 typedef struct list {DATATYPE *head; // 存儲空間基地址int tlen; …

【WPF】在System.Drawing.Rectangle中限制鼠標保持在Rectangle中移動?

方案一,在OnMouseMove方法限制 在WPF應用程序中,鼠標在移動過程中保持在這個矩形區域內,可以通過監聽鼠標的移動事件并根據鼠標的當前位置調整其坐標來實現。不過需要注意的是,WPF原生使用的是System.Windows.Rect而不是System.D…