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那樣將常量轉換爲變量:
會發現,實際上是新建了一個變量,並非將原始的常量變爲了變量、
若是有什麼錯誤還請指出,有什麼遺漏的還請補充,會進行相應的修改。