2020年3月15日 星期日

[Python] 機器&深度學習重點節錄

Ch1認識人工智慧

手寫
語音
電腦視覺
專家系統
自然語言處理
電腦遊戲
智慧機器人

機器學習處理常見 分類問題 & 回歸問題
分類 : 垃圾郵件
回歸 : 預測銷售

機器學習實務上解決五種問題 :
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多層感知器的實作案例



沒有留言:

張貼留言