1. 目的:
- 使電腦有能力判別手寫數字圖片,代表的數字為何,評判標準為繳交測試資料預測結果,在kaggle系統上與正確答案計算準確率。
- 此競賽目的為建立一個系統,可以讓電腦自動判別目前圖片代表哪個數字,此系統輸入為灰階像素矩陣,輸出為單一數字。
- 建立此系統總共需要兩份資料,訓練集(trainx,trainy)建立系統,找出系統所需的參數,測試集(test)為建立好系統後,將測試集資料輸入,生成出預測資料,並繳交到kaggle平台上。
2. 方法訓練原理:
本次選用的系統為Neurak network(類神經網路)的訓練架構 ,因此主要目的為尋找Neural network每層轉換所需參數。
3. 資料前處理所用到的技巧:
- 資料為了增加其變化性,變化性增加可以使模組有能力偵測更多樣化的測試資料,使用到keras.preprocessing.image 中的image generater,此模組可以調整影像旋轉,平行位移等功能。
- 在這個分類問題中,也發現為了增加預測準確率,常用到的方法為將類別標籤做onehot encoding,即將類別用010000..形式表示,上升了類別標籤的資訊量,訓練模型會預測出每個類別的概率分布,再取出哪個類別為最大值的類別標籤。
4. 程式執行架構:
資料前處理:
- 資料檔案讀取使用到pandas模組。
- 將訓練及資料分割開類別標籤: train->trainx,trainy,trainx為模組放入的資料,trainy為預測label。
- trainx 做上述提到的image generater,選轉,平移的處理。
- trainy 做onehot encoding。
訓練模組:
- 定義要用到Neural network 訓練架構,因此先初始化一個變數為sklearn keras中的Neural nerwork 類別。
- 定義Neural network每一層的轉換要是甚麼轉換。
- 定義Neural network在參數優化時,損失含數即參數優化方式要用到哪一種方法。損失含數在分類為題中通常定義為 entropy,參數優化方式為此文件下方提到的微分方程方法(gradient descent)。
- 將trainx,trainy資料方式模組中開始用迭帶方法訓練,要開始尋找每一層轉換的參數為何
模組預測測試集資料
測試集資料繳交
5. 作品成果:

→ 此步驟為定義每一層network的轉換為何,Conv2D代表2D捲積運算,Dense 代表矩陣線性轉換,flatten代表將矩陣變成一維,maxtpooling為只保留最大值,batchnormalization為將矩陣做正規化

→ 將訓練集拆分一部分為驗證集後,將訓練集影像作增強(加上位移、選轉),增加訓練效果。
→ 使用模組的.fit函數開始訓練
6. 飯粒的總結:
窩想不到^^b
等一下再寫