手寫
語音
電腦視覺
專家系統
自然語言處理
電腦遊戲
智慧機器人
機器學習處理常見 分類問題 & 回歸問題
分類 : 垃圾郵件
回歸 : 預測銷售
機器學習實務上解決五種問題 :
1.分類 : 二元分類、多元分類
2.異常值判斷 : 偵測異常情況
3.預測性分析 : 迴歸
4.分群 : 找到相似度並分析
5.協助決策 : 決定下一步 ex. Alpha Go.
機器學習種類
1.監督式學習 需要給標準答案
分類 : 是非題與分級
迴歸 : 預測
2.非監督是學習 : 分群。
3.半監督式學習 : 透過少量的有標籤資料增加分群正確度。
4.強化學習 : 無明確答案,需要依據資訊改變策略。
===============================================================
Ch2 建構TensorFlow與Keras開發環境
1.python -m pip install -U tensorflow
2.python -m pip install -U keras
3.python -m pip install --upgrade numpy
IDE選擇
Spyder / Jupyter Notebook
運行環境 nVIDIA GTX 1060 6GB顯卡 / Google Colaboratory雲端服務
Google Colaboratory => 到google drive新增 更多裏面去新增應用程式服務
開啟GPU設定 Runtime -> change runtime type
選擇GPU
使用colaboratory 掛載 google drive外部檔案 [Ref : Google Drive 檔案存取教學]
from google.colab import drive
drive.mount("/content/drive")
透過授權允許存取google drive底下的其他檔案 如.csv等等
接著透過anaconda prompt部屬keras虛擬環境
conda create --name keras anaconda
conda env remove --name keras //刪除環境
conda env list //檢查目前anaconda環境
activate keras //啟動keras
最後使用命令conda list可以瀏覽安裝清單
==================================================================
Ch3深度學習理論基礎
人工智慧包含 機器學習 包含深度學習 => 故 深度學習是機器學習的子集合
http://playground.tensorflow.org/
圖形結構 有包含頂點與邊線 其中又依照邊線有無方向性分為無方向性圖形與方向性圖形
若路徑有數值則為加權圖形,此外有方向性可行程迴圈稱為方向性循環圖 沒有迴圈則為方向性非循環圖
微分與偏微分
輸入(樹突) =>細胞核(神經元)=> 輸出(軸突)
人工神經元透過 判斷 輸入*權重 加總是否大於閥值來決定是否輸出為1或0
>= 閥值 => 輸出1;反之 輸出0
ANNs 類神經網路 一種泛稱其中包含 多層感知器MLP、卷積神經網路CNN、循環神經網路RNN
多層感知器(Multilayer Perceptron, MLP) : http://playground.tensorflow.org/就是典型的MLP也稱為前饋神經網路(Feedforward Neural Network, FNN) 是單向多層的傳統類神經網路
輸入資料->輸入層->隱藏層->...->隱藏層->輸出層->輸出資料
多層感知器是神經網路,若隱藏層超過一層(四層的神經網路稱為深度學習)
卷積神經網路(Convolutional Neural Network, CNN) : 專門處理影像辨識 如 分類圖片、人臉與手寫辨識等的模擬人腦視覺處理區的神經網路,也是前饋神經網路的一種,但層次上不同
輸入資料->輸入層->卷積層->池化層->...卷積層->池化層->全連接層->輸出層->輸出資料
循環神經網路(Recurrent Neural Network, RNN) : 具有短期記憶 處理聲音語言與影片等序列資料的神經網路,實務上被改良的LSTM與GRU取代
輸入資料->輸入層->隱藏層->循環隱藏->輸出層->輸出資料
張量 維度數 = 軸數 = 等級(Rank)
0D 純量值
1D一維陣列
2D二維陣列
3D三個維度的三維陣列 or 一維的矩陣陣列 加上時間間距特性
4D 四維陣列 真實特徵資料圖片 圖片集等 就是用4D
import numpy as np
x = np.ndim() //取得軸數
x = np.shap() //取得形狀
+ - * / 直接使用
b= a.dot(s) 點積運算
============================================================
Ch4多層感知器
線性可分割與線性不可分割問題須理解
神經元又稱感知器
回歸問題使用一個神經元
二元分類問題 使用一個或兩個神經元
多元分類問題 看幾類是幾個 => 數字0~9 是10個
層數與神經元數量建議
隱藏層神經元數量為輸入層到輸出層之間
神經元數量是 輸入層2/3 加上輸出層的數量
隱藏層的神經元數量少於兩倍輸入層的神經元數量
監督學習有真實目標值(標準答案)又稱標籤,可以透過差異(損失分數)去調整權重來達到越來越準確的優化
神經網路訓練迴圈分為正向傳播 評估損失 反向傳播
正向傳播 : 計算預測值
評估損失 : 真實目標比較 算出損失
反向傳播 : 計算每一層的錯誤比例,用梯度下降法更新權重‧優化器使用反向傳播計算每一層權重需要分擔損失的梯度
sigmoid會有函數微分只有1/4 若神經網路反向傳播即多個1/4相乘 將會趨近於0造成梯度消失
(傳不到頭)
避免梯度消失問題可以使用ReLU 即輸入小於0時輸出為0;大於0則為線性函數
迴歸問題使用均方誤差
分類問題使用交叉鏑
樣本資料集(100%中,其中訓練資料集(70%)、驗證資料集(20%)、測試資料集(10%)
==================================================================
Ch5 打造多層感知器神經網路
Keras深度學習模型其中分為
Sequential與Functional API
Sequential為線性堆疊結構 單一輸入單一輸出
Functional API若為多輸入多輸出 或共享神經層需使用之 此外Sequential是為一特殊型
model = Sequential()
model.add 增加隱藏層
編譯模型分類
輸入啟動函數 輸出啟動函數
sigmoid 二元分類
softmax 單標籤多元分類
sigmoid 多標籤多元分類
不需要 迴歸分析
sigmoid 回歸值在0~1間
啟動器 Initializers https://keras.io/initializers/
zeros //全部初始為0
ones //全部初始為1
???_normal //常態分布
???_uniform //均勻分布
優化器 optimizer https://keras.io/optimizers/
sgd(隨機梯度下降法)
adm
rmsprop //循環神經網路的最佳選擇之一
線性迴歸
/ = 正值
\ = 負值
簡單線性迴歸 y = a + b *x
多元線性迴歸 y = a + b1*x1 + b2*x2+ ... + bk*xk
迴歸問題神經網路
波士頓房屋資料集
df = pd.read_csv("./boston...")
df.head()
df.shap()
迴歸分析的神經網路
MSE(Mean Square Error)均方誤差
MAE(Mean Absolute Error)
========================================================
5-5儲存與載入神經網路模型
json_str = model.to_json() //轉換成json結構並儲存到json_str變數中
with open("xxx.config") as text_file:
text_file.write(json_str) //寫入至xxx.config檔案中
model.save_weights("xxx.weight") //儲存權重
model.save("xxx.h5") //儲存模型結構與權重
======
分開載入結構與權重
with open("xxx.config","r") as text_file:
json_str = text_file.read()
mode = model_from_json(json_str)
同時載入結構與權重
model = read_model("xxx.h5")
model.compile(loss="...", optimizer="...", metrics=["accuracy"])
========================================================
Ch6多層感知器的實作案例
沒有留言:
張貼留言