Tensor與tensor深入分析與異同

在Pytorch官方文檔中,對於 Tensortensor 是這樣定義的:

A torch.Tensor is a multi-dimensional matrix containing elements of a single data type

To create a tensor with pre-existing data, use torch.tensor()

Tensor 是多維矩陣,矩陣的元素都是同一種數據類型。

tensor 需要確切的數據對它進行賦值。

對於變量,創建的方式有兩種:創建變量的數據形狀大小並初始化;直接賦值確切的數據值

接下來,就討論 Tensortensor 創建的特點:

方式一:創建變量的數據形狀大小並初始化

指定形狀的大小時,會發生這種情況:對於多維矩陣,(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在未指定數據類型的時候,會根據賦值數據的形式,選擇相應的類型

方式二:直接賦值確切的數據值

Tensortensor都可以通過這種方式進行創建變量。但有一種特殊情況,就是 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
公衆號:「土堆碎念」。回覆「教程」,獲得爲機器學習初學者量身打造的教程

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章