PyTorch中所有的操作都是基于Tensor(張量)的,因此理解張量的含義并能夠自由創建張量是十分必要的。
張量是PyTorch中最基本的操作對象。我們可以用數學中的概念來輔助理解一下張量,如圖5-1所示。
- 標量(Scalar)只具有數值大小,而沒有方向,部分有正負之分,如1、2、3、-10。
- 矢量(Vector)具有大小和方向,如(3,4)。
- 矩陣(Matrix)是一個按照長方陣列排列的復數或實數集合,如[[1,2],[3,4]]。
標量、矢量、矩陣都屬于張量,標量是零維張量,向量是一維張量,矩陣是二維張量。張量還可以是三維的、四維的等。
PyTorch的張量與NumPy中的ndarray類似,但是在PyTorch中,張量可以使用GPU進行計算以提高運算性能。
5.1.2 ?使用特定數據創建張量
為了更好地理解張量中的矩陣,下面先介紹如何將現有的NumPy矩陣轉換成張量中的矩陣。張量就是PyTorch中的一種矩陣形式,因此PyTorch中集成了將NumPy創建的矩陣數據轉換成張量的方法torch.from_numpy(),示例代碼如下:
import torchimport numpy as npa = np.array([3.0, 4.0, 5.0])b = torch.from_numpy(a)print(b)
輸出結果如下:
tensor([3., 4., 5.], dtype=torch.float64)
還可以直接輸入數據創建,方法是torch.tensor(),輸入數據并指定數據的類型(int/float/double) ,示例代碼如下:
import torch
#直接輸入數據創建
a = torch.tensor([[3, 4, 5],[6, 7, 8]])
print(a)
print(a.type())
#輸入數據并指定數據類型創建
b = torch.FloatTensor([[3, 4, 5],[6, 7, 8]])
print(b)
print(b.type())
輸出結果如下:
tensor([[3, 4, 5],[6, 7, 8]])
torch.LongTensor
tensor([[3., 4., 5.],[6., 7., 8.]])
torch.FloatTensor
在一些實際應用中,可能會遇到全0矩陣、全1矩陣的情況,這時張量的創建采用torch.full方法創建,torch.full()方法接收參數為shape,x,輸出一個shape大小的元素全為x的張量,相關代碼如下:
import torch
a = torch.full((2,3),1)
print(a)
print(a.type())
輸出結果如下:
tensor([[1, 1, 1],[1, 1, 1]])
torch.LongTensor
有些時候,可能會使用一些連續的數據,類似于等差序列。這時可以使用torch.arange()方法,它接收三個參數,前兩個是邊界值,后一個是步長(Step),輸出邊界值范圍內步長的等差序列組成的它張量。
import torch
#torch.arange()方法創建
a = torch.arange(0,10,2)
print(a)
print(a.type())
輸出結果如下:
tensor([0, 2, 4, 6, 8])
torch.LongTensor
《PyTorch深度學習與企業級項目實戰(人工智能技術叢書)》(宋立桓,宋立林)【摘要 書評 試讀】- 京東圖書 (jd.com)
本文節選自《PyTorch深度學習與企業級項目實戰》,獲出版社和作者授權發布。
【贈書活動第5期】《PyTorch深度學習與企業級項目實戰》-CSDN博客