PyTorch張量類型創(chuàng)建與轉(zhuǎn)換的詳細指南
引言
在PyTorch的深度學習開發(fā)中,張量(Tensor)作為核心數(shù)據(jù)結(jié)構(gòu),其類型的靈活創(chuàng)建與轉(zhuǎn)換是基礎(chǔ)且關(guān)鍵的操作。不同的業(yè)務場景、硬件環(huán)境對張量數(shù)據(jù)類型有著不同的要求,比如輕量化訓練常用float16,常規(guī)訓練多用float32,高精度計算會用到float64。今天就帶大家系統(tǒng)掌握PyTorch中張量指定類型的創(chuàng)建方法,以及多種類型轉(zhuǎn)換技巧,從基礎(chǔ)概念到實操代碼,一站式吃透
一、前置基礎(chǔ):比特位與數(shù)據(jù)類型的小知識
在學習張量類型之前,我們先理清一個基礎(chǔ)概念:比特位(bit)與字節(jié)(Byte)的關(guān)系,這是理解不同數(shù)值類型的核心。
1個字節(jié) = 8個比特位,而PyTorch中的數(shù)值類型正是通過比特位數(shù)量定義的,比如float16代表16個比特位,換算下來就是2個字節(jié),這也決定了該類型的存儲大小和精度:比特位越少,占用內(nèi)存越小,精度相對越低;比特位越多,占用內(nèi)存越大,精度也越高。
給大家整理了PyTorch中常用張量數(shù)據(jù)類型的對應關(guān)系,一張表就能看明白
| 類型函數(shù) | 對應PyTorch類型 | 比特位數(shù) | 字節(jié)數(shù) | 適用場景 |
|---|---|---|---|---|
| half() | torch.float16 | 16 | 2 | 輕量化訓練、低顯存硬件 |
| float() | torch.float32 | 32 | 4 | 常規(guī)深度學習訓練/推理 |
| double() | torch.float64 | 64 | 8 | 高精度科學計算 |
| short() | torch.int16 | 16 | 2 | 低精度整數(shù)運算 |
| int() | torch.int32 | 32 | 4 | 常規(guī)整數(shù)運算 |
| long() | torch.int64 | 64 | 8 | 索引、大整數(shù)運算 |
| 小提示:PyTorch中創(chuàng)建整數(shù)張量時,默認類型是torch.int64;創(chuàng)建浮點張量時,默認類型是torch.float32,這也是深度學習中最常用的浮點類型,大家一定要記牢 |
二、小技巧:PyTorch文件重命名的快捷操作
在實際開發(fā)中,我們常會遇到文件命名錯誤的情況,比如把“張量類型轉(zhuǎn)換”的文件命名成了“張亮元素類型轉(zhuǎn)換”,這里分享兩個PyTorch項目(PyCharm編輯器)中高效的文件重命名方法,告別手動刪除重建的繁瑣:
方法1:基礎(chǔ)法——右鍵刪除重建
操作簡單,適合新手:右鍵錯誤命名的文件→刪除→新建同名(正確名稱)的.py文件,缺點是需要重新寫文件頭和導入代碼,效率較低。
方法2:快捷法——重構(gòu)重命名(推薦)
這是開發(fā)中最常用的方法,快捷鍵Shift+F6,步驟如下:
- 選中需要重命名的文件;
- 按下
Shift+F6,或右鍵選擇Refactor(重構(gòu))→Rename(重命名); - 輸入正確的文件名,回車確認,整個項目中對該文件的引用會自動更新,無需手動修改!
三、核心操作1:創(chuàng)建指定類型的張量
創(chuàng)建張量時直接指定類型,是最常用、最高效的方式,避免后續(xù)二次轉(zhuǎn)換的麻煩。在使用torch.tensor()創(chuàng)建張量時,通過dtype參數(shù)即可指定張量的元素類型,這里先理清兩個極易混淆的概念,避免踩坑:
tensor.dtype:查看張量內(nèi)元素的類型(如torch.float32、torch.int64),這是我們最常關(guān)注的屬性;tensor.type():查看張量本身的類型,結(jié)果一般為torch.Tensor,代表這是一個張量對象。
3.1 基礎(chǔ)創(chuàng)建:默認類型張量
當我們不指定dtype時,PyTorch會根據(jù)輸入的數(shù)值類型自動分配默認張量類型:
import torch # 導入PyTorch庫,版本建議2.0+
# 創(chuàng)建整數(shù)張量,默認dtype=torch.int64
t1 = torch.tensor([1,2,3,4,5])
print(f"張量元素類型:{t1.dtype}") # 輸出:torch.int64
print(f"張量本身類型:{t1.type()}") # 輸出:torch.LongTensor(對應int64)
# 創(chuàng)建浮點張量,默認dtype=torch.float32
t2 = torch.tensor([1.0,2.0,3.0])
print(f"張量元素類型:{t2.dtype}") # 輸出:torch.float32
print(f"張量本身類型:{t2.type()}") # 輸出:torch.FloatTensor(對應float32)
3.2 精準創(chuàng)建:指定dtype的張量
通過dtype=torch.xxx即可自定義張量元素類型,滿足不同場景需求,代碼示例如下:
import torch
# 創(chuàng)建float16類型張量
t_float16 = torch.tensor([1,2,3], dtype=torch.float16)
# 創(chuàng)建float64類型張量
t_float64 = torch.tensor([1,2,3], dtype=torch.float64)
# 創(chuàng)建int16類型張量
t_int16 = torch.tensor([1,2,3], dtype=torch.int16)
# 創(chuàng)建int32類型張量
t_int32 = torch.tensor([1,2,3], dtype=torch.int32)
print(f"float16張量:{t_float16.dtype}") # torch.float16
print(f"float64張量:{t_float64.dtype}") # torch.float64
print(f"int16張量:{t_int16.dtype}") # torch.int16
print(f"int32張量:{t_int32.dtype}") # torch.int32
重點:在深度學習訓練中,我們幾乎都會用dtype=torch.float32創(chuàng)建張量,這是框架默認的訓練精度,兼顧速度和精度??
四、核心操作2:張量的類型轉(zhuǎn)換
實際開發(fā)中,我們常會遇到已創(chuàng)建的張量類型不符合需求的情況,比如把默認的int64轉(zhuǎn)成float32,把float32轉(zhuǎn)成float16做輕量化。PyTorch提供了兩種類型轉(zhuǎn)換方法,一種通用萬能(推薦掌握),一種針對性便捷(適合有Java基礎(chǔ)的同學),下面詳細講解。
4.1 萬能轉(zhuǎn)換法:type()函數(shù)(強推)
type()函數(shù)是PyTorch中張量類型轉(zhuǎn)換的通用方法,支持任意類型之間的轉(zhuǎn)換,只需在函數(shù)中傳入目標類型torch.xxx即可,語法簡單、記憶成本低,是新手必掌握的方法。
代碼實操:type()函數(shù)轉(zhuǎn)換示例
import torch
# 第一步:創(chuàng)建基礎(chǔ)張量(float32類型)
t = torch.tensor([1,2,3,4,5], dtype=torch.float32)
print(f"原始類型:{t.dtype}") # 輸出:torch.float32
# 轉(zhuǎn)換為int16類型
t_int16 = t.type(torch.int16)
print(f"轉(zhuǎn)換為int16:{t_int16.dtype}") # 輸出:torch.int16
# 轉(zhuǎn)換為float16類型
t_float16 = t.type(torch.float16)
print(f"轉(zhuǎn)換為float16:{t_float16.dtype}") # 輸出:torch.float16
# 轉(zhuǎn)換為float64類型
t_float64 = t.type(torch.float64)
print(f"轉(zhuǎn)換為float64:{t_float64.dtype}") # 輸出:torch.float64
# 轉(zhuǎn)換為int64類型
t_int64 = t.type(torch.int64)
print(f"轉(zhuǎn)換為int64:{t_int64.dtype}") # 輸出:torch.int64
核心優(yōu)勢:無論是什么原始類型,只需改變type()中的目標參數(shù),就能實現(xiàn)任意轉(zhuǎn)換,無需記憶多個函數(shù),一招鮮吃遍天
4.2 便捷轉(zhuǎn)換法:專屬類型函數(shù)
PyTorch為每種常用類型都提供了專屬的轉(zhuǎn)換函數(shù),比如half()、float()、double()、short()等,這些函數(shù)的命名和Java中的基本類型轉(zhuǎn)換高度相似,有Java基礎(chǔ)的同學會很容易上手。
需要注意的是,這類函數(shù)無需傳入?yún)?shù),調(diào)用后直接將張量轉(zhuǎn)換為對應類型,下面是具體的函數(shù)與類型對應關(guān)系,再配合代碼實操理解
專屬函數(shù)與類型對應表
| 專屬轉(zhuǎn)換函數(shù) | 轉(zhuǎn)換后的目標類型 | 等價type()寫法 |
|---|---|---|
| tensor.half() | torch.float16 | tensor.type(torch.float16) |
| tensor.float() | torch.float32 | tensor.type(torch.float32) |
| tensor.double() | torch.float64 | tensor.type(torch.float64) |
| tensor.short() | torch.int16 | tensor.type(torch.int16) |
| tensor.int() | torch.int32 | tensor.type(torch.int32) |
| tensor.long() | torch.int64 | tensor.type(torch.int64) |
代碼實操:專屬函數(shù)轉(zhuǎn)換示例
import torch
# 創(chuàng)建基礎(chǔ)張量(int16類型)
t = torch.tensor([1,2,3,4,5], dtype=torch.int16)
print(f"原始類型:{t.dtype}") # 輸出:torch.int16
# half() → float16
t_half = t.half()
print(f"half()轉(zhuǎn)換:{t_half.dtype}") # torch.float16
# float() → float32
t_float = t.float()
print(f"float()轉(zhuǎn)換:{t_float.dtype}") # torch.float32
# double() → float64
t_double = t.double()
print(f"double()轉(zhuǎn)換:{t_double.dtype}") # torch.float64
# short() → int16(原類型,無變化)
t_short = t.short()
print(f"short()轉(zhuǎn)換:{t_short.dtype}") # torch.int16
# int() → int32
t_int = t.int()
print(f"int()轉(zhuǎn)換:{t_int.dtype}") # torch.int32
# long() → int64
t_long = t.long()
print(f"long()轉(zhuǎn)換:{t_long.dtype}") # torch.int64
4.3 兩種轉(zhuǎn)換方法的對比??
為了讓大家更清晰區(qū)分兩種轉(zhuǎn)換方法的優(yōu)劣、精準匹配自身使用場景,我用Mermaid流程圖做了直觀可視化對比,核心優(yōu)缺點與適配人群一目了然,新手也能快速選對方法

圖表核心解讀:左側(cè)通用type()函數(shù)主打一個“全能適配”,不需要額外記憶多個函數(shù),完全貼合深度學習新手的學習路徑,哪怕后續(xù)遇到特殊類型轉(zhuǎn)換也能輕松應對;右側(cè)專屬函數(shù)寫法更簡潔,適合有Java基礎(chǔ)的同學快速簡寫,但場景局限性更強。日常做PyTorch項目開發(fā),優(yōu)先吃透type()函數(shù),足以搞定99%的張量類型轉(zhuǎn)換需求,穩(wěn)妥又高效
五、實操小總結(jié):核心知識點梳理
- 基礎(chǔ)概念:1字節(jié)=8比特位,PyTorch數(shù)值類型由比特位定義,默認整數(shù)int64、浮點float32;
- 文件重命名:PyCharm中
Shift+F6一鍵重構(gòu),高效且自動更新引用; - 兩個關(guān)鍵屬性:
dtype看元素類型,type()看張量對象類型,切勿混淆; - 指定類型創(chuàng)建:
torch.tensor(數(shù)據(jù), dtype=torch.xxx),深度學習常用torch.float32; - 類型轉(zhuǎn)換:新手強推
type(torch.xxx)通用法,有Java基礎(chǔ)可使用half()/float()等專屬法; - 類型對應:half=float16、float=float32、double=float64、short=int16,記牢這組對應關(guān)系。
六、寫在最后
張量的類型創(chuàng)建與轉(zhuǎn)換是PyTorch的入門基礎(chǔ),看似簡單,但卻是后續(xù)模型訓練、推理優(yōu)化的關(guān)鍵。比如在顯存不足的顯卡上訓練大模型,將張量從float32轉(zhuǎn)成float16能直接節(jié)省一半顯存;在高精度計算場景中,用float64能提升計算準確性。
希望這篇文章能幫大家徹底吃透張量類型的相關(guān)操作,把基礎(chǔ)打牢,后續(xù)才能更順暢地學習PyTorch的進階知識。0基礎(chǔ)學AI開發(fā)并不可怕,只要一步一個腳印,吃透每個基礎(chǔ)知識點,終能實現(xiàn)技術(shù)的提升。
以上就是PyTorch張量類型創(chuàng)建與轉(zhuǎn)換的詳細指南的詳細內(nèi)容,更多關(guān)于PyTorch張量類型創(chuàng)建與轉(zhuǎn)換的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Python中字符串列表的相互轉(zhuǎn)換實際應用場景
在Python編程中,經(jīng)常會遇到需要將字符串列表相互轉(zhuǎn)換的情況,這涉及到將逗號分隔的字符串轉(zhuǎn)換為列表,或者將列表中的元素連接成一個字符串,本文將深入討論這些情景,并提供豐富的示例代碼,幫助讀者更全面地理解字符串列表的轉(zhuǎn)換操作2023-12-12
Python實現(xiàn)五子棋聯(lián)機對戰(zhàn)小游戲
本文主要介紹了通過Python實現(xiàn)簡單的支持聯(lián)機對戰(zhàn)的游戲——支持局域網(wǎng)聯(lián)機對戰(zhàn)的五子棋小游戲。廢話不多說,快來跟隨小編一起學習吧2021-12-12
Python使用高德地圖API批量獲取地址所屬街道并寫回Excel
借助 Python + 高德地圖API,我們可以輕松實現(xiàn)自動化批量查詢并將結(jié)果寫入 Excel 文件中,下面就跟隨小編一起來看看具體實現(xiàn)方法與思路吧2025-11-11
Python 如何創(chuàng)建一個簡單的REST接口
這篇文章主要介紹了Python 如何創(chuàng)建一個簡單的REST接口,文中講解非常細致,代碼幫助大家更好的理解和學習,感興趣的朋友可以了解下2020-07-07
macOS M1(Apple Silicon)安裝配置Conda環(huán)境的具體實現(xiàn)
由于常用的Anaconda和Miniconda現(xiàn)在都沒有提供M1處理器支持的conda環(huán)境,以下是conda-forge提供的miniforge,感興趣的可以了解一下2021-08-08

