深度學習(deep learning)是機器學習的一個子項目。機器學習需要人工傳入特徵,再進行演算分類,而深度學習只要把資料倒進去,特徵會自已分析,然後自動分類。
tensorflow是深度學習的一個框架,目前最多人使用。其實深度學習的框架蠻多的,比如PyTorch就是另一個蠻常看到的框架。支援 Python 的Neural Network 框架請見下圖說明。
Tensorflow 算是個奇葩,在2015年之間突然打敗其它框架,使用量大幅攀升。主要是Google大力推舉的關係。所以我們也就以這個框架來完成 Neural Network 的工作。
Keras
Keras 凱拉斯,是支援 TensorFlow 的更高階函數庫,可以用簡潔的程式碼完成一個Neural Network模型。
什麼神經網路
下圖所示為最簡單只有三層的神經網路。
最左邊的節點,稱為 Input Layer(輸入層),是負責接收外界資料。
中間稱為隱藏層,隱藏層可以多個。
最右邊稱為輸入層(Output),負責展示結果。
x 跟 y 之間的每一條連線,都是一個權重值,y 跟 z 之間的連線也是權重。
$(y_{0}=\sum_{i=0}^{i=n}x_{i}*W_{i0})$
$(y_{1}=\sum_{i=0}^{i=n}x_{i}*W_{i1})$
…………………………..
也就是說,$(y_{0})$ 是 $(x_{0})$ ~ $(x_{n})$ 所有節點的值乘上相對應的權重,然後加總起來。一開始所有的權重都是平均亂數,計算的結果會和已知的結果產生損失函數,然後決定要往上或往下調整權重,供下一次的乘積使用。
第三層 z 為輸出層,通常是全連接層,其值也是所有的 y 節點值乘上相對應權重的總和。
$(z_{0}=\sum_{j=0}^{j=2}y_{j}*W_{j0})$
$(z_{1}=\sum_{j=0}^{j=2}y_{j}*W_{j1})$
todo
模型視覺化
要將上面的模型,以圖形顯示出來,可以使用 ann-visualizer 套件。但 ann-visualizer 又會調用 graphviz 這個套件,請先到 graphviz 官網 下載 graphviz for windows 版本的軟体,安裝時請注意要選取
Add Graphviz to system PATH for all user
安裝完後,記得 Pycham要重新開啟。如果沒有安裝或沒有設定上面的路徑,等會執行程式時,就會出現 找不到檔案 的錯誤訊息。
如果是在Linux之下,需使用如下指令安裝這個軟体
sudo apt-get install graphviz
然後在Pycharm的虛擬環境下安裝如下三個套件
pip install ann-visualizer graphviz tensorflow
最後,可以使用如下測試程式,看圖型有沒有跑出來。
from keras.models import Sequential; from keras.layers import Dense; network = Sequential(); #Hidden Layer#1 network.add(Dense(units=6, activation='relu', kernel_initializer='uniform', input_dim=11)); #Hidden Layer#2 network.add(Dense(units=6, activation='relu', kernel_initializer='uniform')); #Exit Layer network.add(Dense(units=1, activation='sigmoid', kernel_initializer='uniform')); from ann_visualizer.visualize import ann_viz; ann_viz(network, view=True, title="Test", filename="ann.gv");
線上視覺化
在 http://alexlenail.me/NN-SVG/ 這個網站,可以線上繪製CNN圖形。
https://brohrer.mcknote.com/zh-Hant/how_machine_learning_works/how_convolutional_neural_networks_work.html