顯示具有 Tensorflow 標籤的文章。 顯示所有文章
顯示具有 Tensorflow 標籤的文章。 顯示所有文章

2018年3月11日 星期日

Tensorflow (Tensorboard)

Tensorboard的使用方式如下:

在jupyter notebook中先運用tensorflow建構一個簡單的tensorflow模型:

之後輸入以下程式碼:
tf.summary.merge_all()
train_writer = tf.summary.FileWrite('你要存的檔案目錄', sess.graph)
就會將所有的tensorflow的資料打包,並存檔。



怎麼打開tensorboard呢?
要先離開jupyter notebook回到cmd,在Tensorflow的Anaconda的虛擬環境之中執行下列命令:

>activate tensorflow

接下來啟動Tensorboard:

>tensorboard --logdir=c:\你剛存檔的目錄

得到如下的畫面:
可以看到紅色框框中有個網址:
這是個人筆電的內部ip
打開慣用瀏覽器,輸入此網址就可以看到tensorboard了



參考資料
TensorFlow+Keras深度學習人工智慧實務應用

2018年1月21日 星期日

Tensorflow (tf.estimator)

上一篇終於完成了一個簡單的模型並學習及驗證,接下來看看TensorFlow高階的Estimator。tf.estimator可以簡化機器學習的步驟,包含了簡化訓練(學習)的迴圈、簡化評估迴圈以及簡化資料的管理。下方是TensorFlow官方的例子:















其中shuffle=True指的是讀取資料的順序會被打亂,shuffle=False就是按照原來的讀取順序。而數據TensorFlow數據的讀取可以參考這篇,可以幫助理解如何設置shuffle。

執行程式後得到下方輸出:


可以看到每100個step會輸出模型的摘要,這部分跟官方網路上有點不大一樣,所以我多印了一行虛線"---",虛線下方是最後輸出應該要看到的。

tf.estimator並非限制只能使用內建模型,也能自建模型。不過指令太複雜,待整理過後再筆記下來囉。

參考資料
Getting Started with TensorFlow

Tensorflow (Start to Train)

上篇(看這邊)我們已提出一個簡單的模型,並"手動"找到最佳值(當然是用"猜"的方式),這當然不是正常程序,所以接下來利用Tensorflow提供的optimizer(優化演算法)慢慢變化W及b值得到最佳化的model(得到最小的loss)。先複習一下先前有初始值W與b完整的code。



接下來手動改變W與b的值計算loss函數至最小值(tf.assign)完成優化(loss = 0)。


最簡單的optimizer之一為梯度下降法(gradient descent), 簡單來說就是找損失函數微分(梯度)最低值的地方,通常就是最佳化的地方了。Tensorflow厲害之處就是這些函數都準備好啦,只要輸入optimizer = tf.train.GradientDescentOptimizer(learning rate) 呼叫函式(learning rate就是學習率,簡單來說就是更新一次參數要變化梯度的多少比率,太大太小都不好),再定義進行的方式train = optimizer.minimize(loss)就行啦,最後看看要重複執行幾次,就可以得到最後的W及b值。結果還是用"猜"的最準 :),不過畢竟只是例子,沒有每天過年的啦!!!。



當然只看結果沒有學習的感覺,可以多加幾行看看W及b值的變化。


從結果看其實大約400至500次就有0.99的準確率了。

完整程式如下(有點小變動):


參考資料
Getting Started with TensorFlow

2018年1月20日 星期六

Tensorflow (Start to "flow")

我們先前(看此篇)已經對TensorFlow做了初步的了解,但距離真正使用此資料庫進行機械學習的任務還有段距離,我們今天就繼續讀一讀TensorFlow的手冊吧。

先回顧一下,以下是定義兩個浮點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



2018年1月18日 星期四

Tensorflow "Hello World!"

之前(上一篇)已完成TensorFlow的基本架構,我想就拿來試試寫寫看一般程式開始都會寫的"Hello World!"之類的程式,先試著輸入以下的程式:
出來的結果有點怪,除了有紅字外,輸出還多了個"b"?!!
上網爬了很久多文,算是找到一個解決的辦法:

所以看來是Python3解讀的問題,其他有些利用nightly build的建議方法則一直無法成功,總是受到在Anaconda環境中的限制,果然tensorflow的installtion在window中真的是問題不少。

參考資料
https://stackoverflow.com/questions/46439451/why-the-result-prints-bhello-python-when-i-use-tensorflow

Note for TensorFlow (Getting Started)

TensorFlow是Google發展的開放原始碼機器學習函式庫,能以流程圖的概念呈現資料的流動,是現在很熱門的機器學習開發工具。上網看了些文章後,今天開始來試試這個函式庫。

本篇主要根據官網tensorflow.org演練,而官網建議要看得懂基本的手冊(guide),需要:
1. 知道Python語言
2. 至少要知道一點array
3. 理想中要知道一點機器學習,但是如果你知道很少或是根本不懂,本手冊仍是第一個你應該讀的文件。(這點好像講了跟沒講一樣)

TensorFlow提供了不同的應用程式介面(Application Programming Interface, API)。最底層TensorFlow Core提供完全的程式控制,較高層的API典型上比較好學,例如tf.estimator可以管理資料、估計量(estimator)、訓練及介面。

我的工作環境是Anaconda的Jupyter NoteBook,當然要另外安裝tensorflow,安裝方法網路上資料應該不難找,就不多說囉。我的版本是1.4.0。

先來理解何謂Tensor(張量),在"張量流動"資料庫中,顧名思義"張量"是最基本的資料型態,它可以為零維的純量,一維的向量,二維的矩陣等等。例如下面是numpy建構的一維tensor:
 順便看一下幾個常用的屬性:
.ndim   (維度)
.shape  (array的形狀)
.dtype  (資料的型態)

張量流動資料庫的程序可以分成兩大部分,一為建立(Building)計算圖(computational graph),二為執行(Running)計算圖。首先是建立計算圖,計算圖中有許多節點(node),每個節點可以輸入零至多個tensor,輸出一個tensor,例如最簡單的j為constant,不接受輸入,自然輸出它所儲存的值,如下列兩個浮點node (node_1, node_2):
以tf,constant()建立node,其中dtype定為32bit,可看到跟上述的64bit不同,這是因為通常資料很多,為省記憶體就先設為32 bit,當然如果空間很夠,64 bit當然也可。若都不設定,則仍預設為32 bit。定義完就print看看。結果出來的是:Tensor("const_2:0",.......),我咧怎麼回事?跟想像中不一樣。這是因為上述第二步驟(執行(Running)計算圖)還沒完成!
所以我們輸入以下指令:
目標終於達成!!
所謂的Session,是"張量流動"打包整個完全的資料與控制流程,所以必須run session才可得到最後的結果。

Tensorflow手冊上建議的寫法則是:

到這邊終於算是完成最簡單的Tesorflow程式了。

參考資料
Getting Started with TensorFlow

2018年1月16日 星期二

Keras (Tensorflow)的安裝問題:Win10

win10在Anaconda的tensorflow虛擬環境下安裝keras出現了下列問題:

parse() got an unexpected keyword argument 'transport_encoding'


爬了網路一些文之後看到一些不同的解法
看來基本上還是版本的問題

我的方式是在cmd執行以下指令:

> conda install --force html5lib



之後再重裝一次


> pip install keras


打開jupyter notebook測試看看



成功解決問題!!!



參考資料
https://stackoverflow.com/questions/46499808/pip-throws-typeerror-parse-got-an-unexpected-keyword-argument-transport-enco
http://it.kklife.cc/?p=232