[淺談機器學習] #2 聊聊Tensorflow
Tensorflow 實作Iris 分類器比較
上一篇:[淺談機器學習] #1 Machine Learning 基本概念
[前言]
大家好大家好,上一篇稍微介紹了一下機器學習的概念,發完那篇文之後,有發現其實也有其他大大解釋的很棒。 也分享給各位朋友:文章連結
當然每個人的講的可能大同小異,就各位朋友可以多看看不同人的說法,說不定可以讓自己對Machine Learning有更多的了解。
再來聊聊這次講的主題Tensorflow吧,有鑑於其實大家都聽過Tensorflow,但是很多人對於他實際上到底是甚麼,怎麼支援我們完成Machine Learning都還有疑問,所以我想在這邊給大家簡單介紹一下。
Tensorflow
我相信上面那張圖大家已經看到不想再看了。
TensorFlow: A system for large-scale machine learning — Google AI TensorFlow:一套針對處理大型機器學習的系統
簡單來說,是一套由google所開發以及維護,用來協助進行”Machine Learning實作”的一套系統。當然你要把tensorflow當作一種程式語言的套件也是可以。
蛤? 甚麼意思? 聽不懂好籠統。 協助進行Machine Learning? 怎樣協助? 協助甚麼?
這裡給一下我自己認為的Machine Learning的基本概念
(強調)基本而已喔 0.<* 要定義的話可以上wiki上面看。
那看完那篇Machine Learning的基本概念後,應該感覺到機器學習是由很多數學運算所構築而成的,數學光要用紙筆算就很困難了,還要用程式碼算,很多人應該想到這又開始頭痛了吧。
Tensorflow就是來協助大家完成這些數學跟架構的。
我們來用一個很簡單的例子來做說明:
我們現在用經典的例子Iris data set然後用python實作一個非常簡單的Neural Network 的Multi-Class Classifier分類器。
架構圖預定長這個樣子:
我在這邊不一步每一步講解怎麼實作的了,畢竟今天的主角不是Build a Neural Network from scratch。 這邊請先往下滑不要看程式碼內容,因為洋洋灑灑也沒講解,沒註解跟沒推導,實在是不容易看得明白。
謝謝大家的配合,沒有先看上面那一長串的code。但是我們可以看的到,整體來說大約要寫80–90行程式碼。
當然Code多不代表一定不好,程式的好壞不是看Code的多寡!!!
重點是我們裡面的Sigmoid function、Softmax function、weight的學習更新,以及Sigmoid function 跟 Softmax function的微分,這些在實作這個multi-class classifier的時候,全部都要我們自己實作。 沒錯,全部! 所以實作起來會非常的花時間跟功夫。
接下來我們來看看用Tensorflow實作的版本,基本上兩邊的演算法一模一樣,參數也一模一樣,也是先不要看得太仔細,等看完文章,回頭再來慢慢看。
很好再次感謝大家,跳到這邊來,我裡面沒有放random_sampling,不過差不了多少。程式碼行數只剩下40行不到。我們下面來針對程式碼中幾個重點不同的地方做個比較說明。
- Sigmoid Function
實作版:
TF版:
- Softmax Function
實作版:
TF版:
Back-propagation:
實作版:
TF版:
TF的版本主要的差別,是很多數學上的運算都由TensorFlow的function以及物件來完成,像是學習更新Weight的這個動作,由TensorFlow的 GradientDescentOptimizer來幫忙完成,我們不需要了解backpropagation,不用了解sigmoid的微分方程,不用知道softmax的微分,這是一個多麼美好的世界是不是。
比較到這邊,我們來總結一下。
所以甚麼是TensorFlow?
TensorFlow 是一個幫助實作機器學習的一個套件,裡面會幫忙實作很多複雜的數學演算法、公式、組織架構、以及轉換的Function。
使用TensorFlow需要那些知識?
要知道他的各個function的使用方式,以及你要使用的演算法的名稱以及流程。
自己實做比較好還是使用TensorFlow比較好?
對於學習數學以及演算法的角度來說,沒有甚麼比自己實作還好的,可是假如你現在同時有工作,或是課業上的壓力,又要在時間內做出甚麼,那當然還是以節省功夫為主。
那為什麼不用其他完全包好的套件ex Sklearn或是 Keras?
其實不會不行,我們可以分成三種方式來實作ML:
- 完全自己實作
- Tensorflow (low level api)
- Keras Sklearn (High level api)
這三種方式其實各自都有各自的優缺,就跟軟體工程一樣,各種選擇都是一個trade off。
- 完全自己實作
- Tensorflow (low level api)
- Keras Sklearn (High level api)
大概介紹到這邊,希望大家對於Tensorflow,有更多的認識,之後會再有一篇講解這篇的實作內容,包括說明推導BackPropagation。也會有更多的Tensorflow,從頭實作,或是其他ML應用跟玩具的文章。
因為時間的關係,文章目前是一周內一篇(一禮拜內至少一篇),假如看完之後意猶未盡,想要趕快看更多的Tensorflow教學,個人推薦:
感謝大家再次看完這次的文章,假如有問題或是講不清楚的地方一樣,歡迎大家提出問題,假如覺得講得不錯,也拜託給點鼓勵。0w0)b