先回顧一下,以下是定義兩個浮點node (node_1, node_2)並完成一個Session的完整程式:
但是到這邊僅是定義"張量"而已,根本還沒開始"流動",所以接下來我們看看怎把兩個數字加起來(流動!!)。首先先建立一個新的node_3,定義為藉由tf.add()相加後的結果:
如同我們先前看過的,若沒執行sess.run(),程式不會執行運算。執行sess.run(node_3)就可以把兩個node加起來了。
當然在多數的情況,我們不會僅使用常數(constant)執行運算,所以可以先建立placeholder,之後再接受輸入值。如建立下列的a及b,再定義adder_noder為兩個node的和,執行時利用一個dictionary{}輸入,如下方的例子:
如上述的第二個例子,a及b不一定只能用純量,向量也是可以的,將[1,2]及[3,4]兩個向量加起來得到[4,6]的結果。
可以再把結果乘兩倍:
在機械學習中,我們通常先提出一個可供輸入參數的模型(model),之後就可以"訓練"了,因此我們必須引入變數(Variable)於模型之中,如下方例子的變數W及b:
這邊我們先輸入起始值(分別為W=0.3; b=-0.3),model為W*x+b。不過tf.constant呼叫的時候就開始動作了,值也不會變動。但tf.Variable則不一樣,因此必須多一個呼叫啟動變數的指令tf.global_variables_initilizer(),另外,placeholder則輸入四個數字[1,2,3,4],最後就可以得到model運算後的結果[0, 0.3, 0.6, 0.9]。
也可以這樣寫:
with as 的語法好處是資源管理比較不會出錯。好啦~現在有個model囉,但還是要知道這個model的好壞,所以再加入一個y的placeholder,另外引入一個評估model好壞的損失(loss)函數(這邊應該是指均方誤差,但略去1/2):
結果是23.66。
接著"手動"地變更W與b的值(W=-1; b=1),再算一次。
得到0 的結果,以損失函數來說是比較好的model。
接下來就是要以"機械"的方式取代"手動"的工作將W與b的值最佳化。
Getting Started with TensorFlow
沒有留言:
張貼留言