這篇會示範,只要稍微會寫 python,儘管對 AI 只有極淺的認識,也能輕易兜出一個,專家們眼中可能很白癡的 AI 模型。若題目不難、訓練資料夠多,這個白癡模型仍可以莫名其妙的變聰明。
全都的程式碼都在下圖,20行就能兜出一個全連層 (fully connected layer ) 組成的全連接神經網路模型 (DNN)。
簡單解釋
ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789
這36類其中之一fc1
,輸入整張圖片,大小為 H x W x C,輸出長度 60 x 200 的特徵,是我憑感覺任意定的。也許可以想成把長度 36000 的圖片內容轉換成長度 12000 的特徵。fc2
,把長度 12000 的特徵轉換成 1200。fca
把長度 1200 的特徵,轉換成 36 個分數,代表圖片中第一個驗證碼是 36 類的哪一類。以下圖來說,會希望 fca 輸出的 36 的分數中,Y 的分數最高。fca
fcb
fcc
fcd
fce
分別對應到驗證碼的五個文字。x
攤平成 36000 的資料,然後依序經過每一層。每一層輸出記得多做 relu
函數,可以想像成把 input feature 做完線性轉換後再做一個非線性轉換。(關於為什麼全連接層是在做特徵轉換,之前有寫一篇 誤上 AI 列車的山道猴,就是我。由於是把文章當作個人筆記,順便在同溫層中抒發心情,所以寫得有點零散,也不嚴謹,當故事看就好,有興趣的讀者一定要去網路找正式教材,才不會學歪。)
模型的發展通常似乎都是先用大模型嘗試可行性,可行後再用其他知識或技術來簡化模型?當初全連接神經網路 (DNN) 似乎也是?因為參數較多,執行慢,記憶體需求大,後來就有人導入了類似傳統影像處理演算法的濾波器,把模型簡化成捲積式神經網路 (CNN)。
下一篇會示範怎麼兜一個 CNN,跟這篇一樣,由於這類模型幾乎都成了公版,不用知道太多原理也能兜出來。
這次的專案用 DNN 或 CNN 都可以,可以直接跳到第 5 篇,訓練、匯出模型。
系列文整理:
0. 從零開始,打造第一個 AI 模型 (序言)
1. 環境設定
2. 準備資料集
3. 實做 全連接神經網路 (參數較多)
4. 實做 捲積式神經網路 (參數較少)
5. 訓練、匯出模型
6. 載入、使用模型