在Pytorch官方文檔中,對於 Tensor
與 tensor
是這樣定義的:
A
torch.Tensor
is a multi-dimensional matrix containing elements of a single data typeTo create a tensor with pre-existing data, use
torch.tensor()
Tensor
是多維矩陣,矩陣的元素都是同一種數據類型。
tensor
需要確切的數據對它進行賦值。
對於變量,創建的方式有兩種:創建變量的數據形狀大小並初始化;直接賦值確切的數據值
接下來,就討論 Tensor
與 tensor
創建的特點:
方式一:創建變量的數據形狀大小並初始化
指定形狀的大小時,會發生這種情況:對於多維矩陣,(3,4)可以表示三行四列的矩陣,這是沒有歧義的。對於 Tensor
會創建一個三行四列的矩陣,但是對於 tensor
卻無法創建相應的變量。因爲它需要卻確定的數據值。
但當輸入(5)時,Tensor
是一個矩陣,所以將這個5理解爲是(1,5),一行五列的矩陣。
tensor
會將這個5認爲是一個確定的數據。它會創建出一個值爲5的變量。
代碼:
輸入爲5時:
Input:
>>>x = torch.Tensor(3, 4)
>>>y = torch.tensor(3, 4) #這行是錯誤的,因爲tensor需要確切的數據值
>>>print(x)
Output:
tensor([[1.3733e-14, 6.4076e+07, 2.0706e-19, 7.3909e+22],
[2.4176e-12, 1.1625e+33, 8.9605e-01, 1.1632e+33],
[5.6003e-02, 7.0374e+22, 1.0284e+21, 1.0596e-38]])
輸入爲(5)時:
Input:
>>>x = torch.Tensor(5)
>>>y = torch.tensor(5)
>>>print(x.size())
>>>print(y.size())
>>>print(x.type())
>>>print(y.type())
Output:
torch.Size([5]) #這個表示,x是一個一維張量,就像數學中的向量
torch.Size([]) #這個表示,y是一個標量,是一個0維度的張量
torch.FloatTensor #x在未指定數據類型的時候,默認是FloatTensor類型
torch.LongTensor #tensor在未指定數據類型的時候,會根據賦值數據的形式,選擇相應的類型
方式二:直接賦值確切的數據值
Tensor
與tensor
都可以通過這種方式進行創建變量。但有一種特殊情況,就是 torch.Tensor(5.6)
是錯誤的。你可以這樣理解,因爲Tensor創建的是多維矩陣,從嚴格意義上說,標量(一個數字),不是矩陣。所以Tensor
無法創建。而這種方式就是允許的,torch.Tensor([5.6])
。
Input:
>>>a = torch.Tensor([[5.6, 5.8],[2, 4]])
>>>b = torch.tensor([[5.6, 5.8],[2, 4]])
>>>print(a)
>>>print(b)
>>>print(a.size())
>>>print(b.size())
>>>print(a.type())
>>>print(b.type())
Output:
tensor([[5.6000, 5.8000],
[2.0000, 4.0000]])
tensor([[5.6000, 5.8000],
[2.0000, 4.0000]])
torch.Size([2, 2])
torch.Size([2, 2])
torch.FloatTensor
torch.FloatTensor
接下來示範下錯誤的一些方式
Error:
>>>a = torch.tensor(3, 4) #tensor是從已有數據中創建矩陣的,這種形式,tensor無法對矩陣中的元素進行初始化,所以無法進行創建。如果是Tensor時,Tensor默認的數據類型是FloatTensor,可以對其進行初始化
>>>a = torch.Tensor(5.6)
總結:
Tensor
主要是創建多維矩陣的,標量從某種意義上,不算矩陣。所以Tensor
可以通過賦值多維矩陣的方式創建,但是無法指定標量值進行創建。如果想創建單個值,採用[5.6] 這種形式,指定一行一列的矩陣。
同時,Tensor
可以指定多維矩陣形狀的大小,並且默認的數據類型是FloatTensor
。
tensor
主要是根據確定的數據值進行創建,無法直接指定形狀大小,需要根據數據的大小進行創建。但同時,tensor
沒有賦值數據值是矩陣的限制,可以直接使用tensor(5.6)
Input:
a = torch.tensor(5.6)
print(a)
print(a.size())
Output:
tensor(5.6000)
torch.Size([]) #pytorch對標量(0維矩陣)的表示
Github: https://github.com/zhiyaozhou/Pytorch-Tutorial
公衆號:「土堆碎念」。回覆「教程」,獲得爲機器學習初學者量身打造的教程