Kaggle Project 2:

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

等一下再寫