在靜安正規(guī)的設計公司網站個人博客登錄入口
張量概念
張量是什么?
單個元素叫標量(scalar),一個序列叫向量(vector),多個序列組成的平面叫矩陣(matrix),多個平面組成的立方體叫張量(tensor)。在深度學習中,標量、向量、矩陣、高維矩陣都統(tǒng)稱為張量。在pytorch中,一個Tensor內部包含數(shù)據和導數(shù)兩部分。
Pytorch的基本數(shù)據結構是張量Tensor。張量即多維數(shù)組。Pytorch的張量和numpy中的array很類似。
在Pytorch中,我們使用張量對模型的輸入和輸出以及模型的參數(shù)進行編碼。最重要的是,數(shù)據轉化為張量可以方便在GPU上運行,這樣運行速度可以大大加快。
一、張量的數(shù)據類型(如何創(chuàng)建張量)
torch.float64(torch.double),
torch.float32(torch.float), 最常用
torch.float16,
torch.int64(torch.long),
torch.int32(torch.int),
torch.int16,
torch.int8,
torch.uint8,
torch.bool
可以直接使用指定類型
**也使用特定函數(shù)創(chuàng)建:**torch.IntTensor()、torch.tensor()(等價于torch.FloatTensor)、torch.BoolTensor()
注意:
torch.IntTensor(3)創(chuàng)建的張量并不是 tensor(3)或者tensor([3]),而是隨機的三個整數(shù)
torch.Tensor()參數(shù):
data:data的數(shù)據類型可以是列表list、元組tuple、numpy數(shù)組ndarray、純量scalar(又叫標量)和其他的一些數(shù)據類型。
dtype:該參數(shù)可選參數(shù),默認為None,如果不進行設置,生成的Tensor數(shù)據類型會拷貝data中傳入的參數(shù)的數(shù)據類型,比如data中的數(shù)據類型為float,則默認會生成數(shù)據類型為torch.FloatTensor的Tensor。
device:該參數(shù)可選參數(shù),默認為None,如果不進行設置,會在當前的設備上為生成的Tensor分配內存。
requires_grad:該參數(shù)為可選參數(shù),默認為False,在為False的情況下,創(chuàng)建的Tensor不能進行梯度運算,改為True時,則可以計算梯度。
pin_memory:該參數(shù)為可選參數(shù),默認為False,如果設置為True,則在固定內存中分配當前Tensor,不過只適用于CPU中的Tensor。
不同類型轉換:
注意區(qū)分 torch.tensor 和 torch.Tensor:
所以說 torch.Tensor 等價于 torch.FloatTensor
二、張量維度
不同類型的數(shù)據可以用不同維度(dimension)的張量來表示。
標量為0維張量,向量為1維張量,矩陣為2維張量。
彩色圖像有rgb三個通道,可以表示為3維張量。
視頻還有時間維,可以表示為4維張量。
可以簡單地總結為:有幾層中括號,就是多少維的張量。
三、張量尺寸
可以使用 shape屬性或者 size()方法查看張量在每一維的長度.
可以使用view方法改變張量的尺寸。
如果view方法改變尺寸失敗,可以使用reshape方法.
四、張量和numpy數(shù)組
可以用numpy方法從Tensor得到numpy數(shù)組,也可以用torch.from_numpy從numpy數(shù)組得到Tensor。
這兩種方法關聯(lián)的Tensor和numpy數(shù)組是共享數(shù)據內存的。
如果改變其中一個,另外一個的值也會發(fā)生改變。
如果有需要,可以用張量的clone方法拷貝張量,中斷這種關聯(lián)。
此外,還可以使用item方法從標量張量得到對應的Python數(shù)值。
使用tolist方法從張量得到對應的Python數(shù)值列表。
tensor.add_(1) #給 tensor增加1,arr也隨之改變 等價于: torch.add(tensor,1,out = tensor)
#torch.from_numpy函數(shù)從numpy數(shù)組得到Tensor
arr = np.zeros(3) # 1*3 然后元素都是0
tensor = torch.from_numpy(arr)# numpy方法從Tensor得到numpy數(shù)組
tensor = torch.zeros(3)
arr = tensor.numpy()
參考:https://github.com/lyhue1991/eat_pytorch_in_20_days