pytorch和tensorflow的愛恨情仇之張量

pytorch和tensorflow的愛恨情仇之基本數據類型:http://www.javashuo.com/article/p-uplvdtbh-nu.htmlhtml

pytorch版本:1.6.0ui

tensorflow版本:1.15.0spa

基本概念:標量、一維向量、二維矩陣、多維張量。3d

一、pytorch中的張量htm

(1)經過torch.Tensor()來創建常量blog

這裏有兩種張量,一種是直接經過toch.Tensor()創建的,另外一種是 Variable()創建的,它們的區別是:在新版本的torch中能夠直接使用tensor而不須要使用Variable。get

在舊版本中Variable和Tensor的區別在於,Variable能夠進行偏差的反向傳播,而Tensor不能夠。import

Variable默認的requires_grad也是False。require

咱們接下來看看使用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來標明該變量是否可以進行梯度計算並進行更新。

二、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那樣將常量轉換爲變量:

會發現,實際上是新建了一個變量,並非將原始的常量變爲了變量、 

 

若是有什麼錯誤還請指出,有什麼遺漏的還請補充,會進行相應的修改。

相關文章
相關標籤/搜索