pytorch和tensorflow的愛恨情仇之基本數據類型:https://www.cnblogs.com/xiximayou/p/13759451.html
pytorch版本:1.6.0
tensorflow版本:1.15.0
基本概念:標量、一維向量、二維矩陣、多維張量。
1、pytorch中的張量
(1)通過torch.Tensor()來建立常量
這里有兩種張量,一種是直接通過toch.Tensor()建立的,另一種是 Variable()建立的,它們的區別是:在新版本的torch中可以直接使用tensor而不需要使用Variable。
在舊版本中Variable和Tensor的區別在於,Variable可以進行誤差的反向傳播,而Tensor不可以。
Variable默認的requires_grad也是False。
我們接下來看看使用torch.Tensor()來看看例子:
對於常量,是不能夠在聲明指定其需要梯度計算的,如下所示:
為什么使用torch.Tensor()不可以直接指明requires_grad=True呢,但是可以通過顯示指定a.requires_grad=True。我的理解是常量和變量之間是可以互相轉換的,當將requires_grad通過(數據.requires_grad=True)后,該常量已經變成了變量。
(2)通過from torch.autograd import Variable來建立變量
我們傳入的值就不能是一個列表了,需要一個張量,我們可以這么做:
這也可以說明常量是可以轉換為變量的。但需要注意的是由常量轉換而來的變量就不是原來的常量了:
(3) 通過torch.tensor()更加靈活的建立常量和變量
我們還需要注意的是使用torch,Tensor()和torch.tensor()以及Variable()區別:這里可以直接傳入一個列表啦
我們也可以直接使用torch.tensor()來定義一個變量,通過指定requires_grad來標明該變量是否能夠進行梯度計算並進行更新。
2、tensorflow中的張量
在tensorflow中,可以通過tf.consatnt()和tf.Variable()來建立張量,與pytorch舊版本類似的是,tf.constant()對應torch.Tensor(),tf.Variable()對應torch.Variable(),tf.constant創建的是常數,tf. Variable創建的是變量。變量屬於可訓練參數,在訓練過程中其值會持續變化,也可以人工重新賦值,而常數的值自創建起就無法改變。
其中tf.assign()是將b的值賦值給a,因為a是常量,因此不可改變,就會報該錯誤,再看下面一個例子:
我們將10賦值給state,然后新建了一個變量state_。state是一個變量,這樣是沒有問題的,這樣的話在訓練的過程中我們就可以不斷地更新參數了。 再看一個例子:
在這種情況下,我們僅僅只是將a指向的值改為指向b,並沒有真正修改a的值。
如果我們像pytorch那樣將常量轉換為變量:
會發現,其實是新建了一個變量,並不是將原始的常量變為了變量、
如果有什么錯誤還請指出,有什么遺漏的還請補充,會進行相應的修改。