這篇會示範,只要稍微會寫 python,儘管對 AI 只有極淺的認識,也能輕易兜出一個,專家們眼中可能很白癡的 AI 模型。若題目不難、訓練資料夠多,這個白癡模型仍可以莫名其妙的變聰明。

簡單解釋
- line 5: MyDNN 繼承 torch.nn.Module
- line 6: 36指的是,圖片中五個驗證碼,每一碼都可能是
ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789
這36類其中之一 - line 8: 全連接層
fc1
,輸入整張圖片,大小為 H x W x C,輸出長度 60 x 200 的特徵,是我憑感覺任意定的。也許可以想成把長度 36000 的圖片內容轉換成長度 12000 的特徵。 - line 9: 可有可無。全連接層
fc2
,把長度 12000 的特徵轉換成 1200。 - line 11: 全連接層
fca
把長度 1200 的特徵,轉換成 36 個分數,代表圖片中第一個驗證碼是 36 類的哪一類。以下圖來說,會希望 fca 輸出的 36 的分數中,Y 的分數最高。 - line 11~15:
fca
fcb
fcc
fcd
fce
分別對應到驗證碼的五個文字。 - line 18: 在 forward 函數理,把輸入
x
攤平成 36000 的資料,然後依序經過每一層。每一層輸出記得多做relu
函數,可以想像成把 input feature 做完線性轉換後再做一個非線性轉換。

驗證碼固定有五個文字
(關於為什麼全連接層是在做特徵轉換,之前有寫一篇 誤上 AI 列車的山道猴,就是我。由於是把文章當作個人筆記,順便在同溫層中抒發心情,所以寫得有點零散,也不嚴謹,當故事看就好,有興趣的讀者一定要去網路找正式教材,才不會學歪。)
模型的發展通常似乎都是先用大模型嘗試可行性,可行後再用其他知識或技術來簡化模型?當初全連接神經網路 (DNN) 似乎也是?因為參數較多,執行慢,記憶體需求大,後來就有人導入了類似傳統影像處理演算法的濾波器,把模型簡化成捲積式神經網路 (CNN)。
下一篇會示範怎麼兜一個 CNN,跟這篇一樣,由於這類模型幾乎都成了公版,不用知道太多原理也能兜出來。
這次的專案用 DNN 或 CNN 都可以,可以直接跳到第 5 篇,訓練、匯出模型。
系列文整理:
0. 從零開始,打造第一個 AI 模型 (序言)
1. 環境設定
2. 準備資料集
3. 實做 全連接神經網路 (參數較多)
4. 實做 捲積式神經網路 (參數較少)
5. 訓練、匯出模型
6. 載入、使用模型