tensorflow,以下簡稱tf。
版本記錄:
anaconda自帶的下面這些庫必須先解除安裝了,裝tensorflow的時候順帶裝上它們。
不然總報錯,vs2017 && vscode都會import報錯,無法除錯。
---numpy-1.16.1
tensorflow-1.13.0rc2
matplotlib-3.0.2
一開始接觸容易蒙蔽。
a=tf.add(b,c)
這種東西,想當然的以為a是個返回值。
但a其實是個物件噠、
有返回值的函式可以做成物件,沒返回值的也可以做成物件。
總之在tf裡面,絕大部分基礎操作都是作為「概念上的運算」實體化而成的物件。
通俗的說,每乙個物件,儲存了一條計算式。
a1=tf.add(b,c)
a2=tf.multiply(a,c)
如上面的例子,a1中儲存了"b+c"這條式子。
a2中儲存了"(b+c)*c"這條式子 (也可以說是儲存了"a1*c",但是a1本身不具備確實的存在價值,只是中間容器罷了。)
但無論是a1還是a2,都只是式子而已,都只記錄了「概念上的運算」,卻並沒有真正被運算出來。
所以在設計階段,他們是沒有值的!
你去print(a2),能得到的也就是"(b+c)*c"這條式子,並沒有人幫你算值
#當然事實上你去print只會返回乙個物件型別資訊,
所有運算都集中在在tensorflow.session()會話中處理!!
tensorflow.session().run(a2)
此時真正對「式子」進行了「運算」。
run()函式才會給返回值。
你把上面的式子print()包起來就能看到結果了。
一開始接觸tf,做完乙個demo我就很蒙蔽。
雖然我告訴你了要minimize誰,告訴了你怎麼計算loss,但我沒告訴你咋更新引數啊!!!你怎麼就啥都會呢。
為什麼要搞定義+計算分離的設計,和這個問題本質是相同的。
幾番查詢看到官網一段介紹:
用tensorflow來訓練它是非常容易的。因為tensorflow擁有一張描述你各個計算單元的圖,它可以自動地使用反向傳播演算法(backpropagation algorithm)來有效地確定你的變數是如何影響你想要最小化的那個成本值的。然後,tensorflow會用你選擇的優化演算法來不斷地修改變數以降低成本。//參考
突然有點明白了,因為tf能自己搞反向傳播,計算任意兩個標準引數之間的梯度啊!
所以你不用給他寫引數更新式子,它自己就會更新。
簡單的說,tf自己搞了個新宇宙。
這個宇宙內的數學規則都被重新設計了一遍。
tf裡面每乙個運算,都有對應的專門的類。
這些類內建好了對應的求導演算法。
你從本宇宙輸入的資料,都必須先變成標準化的tf宇宙的物件。
tf.tensor
tf.variable
tf.placeholder
...
所有東西在同乙個標準下進行運算,自然也可以被這個標準的建立者(tf宇宙)記錄、解構、求導。
舉例:直接用b=2*a是算不了b對a的梯度的。
雖然我們都知道是2,但tf不知道,因為這條式子不屬於tf宇宙。
你得先把資料都變成tf裡的標準形式。
例如
a=tf.get_variable('a',[1],initializer=tf.constant_initializer(1.0))
c=tf.constant(2)
這樣一來,a就是乙個合法的tf宇宙變數,c就是乙個合法的tf宇宙常量
規範了資料不夠。連乘法都不能用py自帶的,要用tf裡面的。
如果你直接a*c,這樣相當於兩條「式子」相乘,不是「值」相乘,是沒有意義的。
(當然事實上可以通過過載*運算子來讓它有意義,此處只是便於理解。)
必須使用tf宇宙標準形式。
b=matmul(a,c)
然後因為tf內建了對matmul()函式的求導法則,這樣才能求b對a的導數,為常數2。
然後回到最開始說的,這也是為什麼tf必須搞定義和計算分離。
因為它需要無數次去自動算梯度,自動更新引數。
所以它必須得知「如何求導」。
要知道「如何求導」,必須知道「如何計算」。
所以tf宇宙裡的物件,儲存的都是「計算過程」,即「式子」,這一資訊。
tensorflow學習筆記
tensorflow安裝可以直接通過命令列或者原始碼安裝,在此介紹tensorflow8命令列安裝如下 安裝tensorflow sudo pip install upgrade 另外,解除安裝tensorflow命令為 sudo pip uninstall tensorflow tensorflo...
Tensorflow學習筆記
1.如何在虛擬機器中安裝tensor flow 1 首先安裝pip pip install 2 pip install 2.學習tensorflow需要學習 python and linux 3.使用 tensorflow,你必須明白 tensorflow 1 使用圖 graph 來表示計算任務.2...
TensorFlow學習筆記
1 擬合直線 import the library import tensorflow as tf import numpy as np prepare train data train x np.linspace 1,1,100 temp1 train x,temp2 train x.shape,...