pytorch和tensorflow的愛恨情仇之張量


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

會發現,其實是新建了一個變量,並不是將原始的常量變為了變量、 

 

如果有什么錯誤還請指出,有什么遺漏的還請補充,會進行相應的修改。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM