理解張量,並將張量與線性代數的知識連接起來,我認為最重要的是理解 tensor
的兩個屬性:shape
和 ndim
。
ndim
表示張量的維度,一維張量的 ndim
值為 1,二維張量的 ndim
值為 2。
shape
表示張量的形狀,它的值是一個列表,列表元素個數與張量的維度相等,每一個元素值表示張量在此維度的元素個數。
舉例來說:
>>> tensor = torch.randn(3, 2, 2)
>>> tensor
tensor([[[ 1.1070, -1.3736],
[-1.6743, 1.4504]],
[[ 0.0119, -0.1400],
[ 0.5095, -0.8208]],
[[-1.5840, -0.2786],
[ 2.3791, -1.4570]]])
>>> tensor.ndim
3
>>> tensor.shape
torch.Size([3, 2, 2])
對於這樣一個張量,它有三個維度,shape = 3 × 2 × 2
,這表示此張量有三個二維張量,每個二維張量中有兩個一維張量,每個一維張量中有兩個元素。
然后我們從線性代數的角度來理解張量:
由於行向量和列向量都是向量,而向量在 PyTorch
中被抽象為一維張量,因此在 PyTorch
中不區分行向量和列向量,一律都是一維張量。
初學者可能會將 torch.Size(1, n)
的張量認為是行向量,將 torch.Size(n, 1)
的張量認為是列向量,然而這兩種張量的 ndim = 2
,因此它們是二維張量,可以類比為線性代數中的矩陣。甚至於 torch.Size(1, 1)
的張量都是矩陣,因為它是二維張量。
關於 PyTorch
中張量(向量/矩陣)的乘法請看這篇博文。