Download as pdf or txt
Download as pdf or txt
You are on page 1of 13

AI 入門 期末小組報告

(一)動機:
MNist 可以有效辨認阿拉伯數字,那是否也能辨認中文的
數字(一、二、三 ……)呢?

(二)目的:
做出能辨識中文數字的 model

(三)內容:
從最初的資料收集(由於疫情期間加上時間壓力,我們的原
始資料是採用電腦輸入各種不同的字體和一點自己的手寫
所組成),資料預處理(資料擴增、one-hot encoding 等),到
model 的設計與訓練。(完整內容在附錄)

(四)心得:
這次的小組報告我主要是負責撰寫程式和收集訓練的數據,
在做這次報告以前,我們都是拿到已經處理好的數據,不
但方便且不用浪費時間。而這次報告一開始就是要我們自
己生資料出來,在經過不斷討論後,改變字體的確是一個
還不錯且不那麼複雜的方式,但這也實在花了我們一大半
的時間,讓我們體會到要有足夠且好用的數據是那麼不容
易的事。後面的 model 設計、訓練做起來就輕鬆許多,在
試了各種不同的變因後,我們的準確率也有到 90 幾%,雖
然還不太能用在實際手寫上,但有了這個結果也還蠻開心
的。
在上完了這學期的 AI 入門後,也對 AI 有了初步的認識,
而跟我以前想像的可以說是完全不一樣,原本以為 AI 是多
麼神奇的技術,實際了解後也的確很厲害,但少了一點奇
幻的感覺,好像 AI 並沒有離我們那麼遙遠,以後有機會我
也會想更進一步了解 AI。
附錄(完整報告內容):

AI 入門期末專題——仿製 MNIST

第六組:
2020AI27 蔡翰宗
2020AI28 黃昱鈞
2020AI29 林威龍
2020AI30 邱振源
1、 實驗目的
MNIST 阿拉伯數字的辨識是卷積神經網路中的經典題型,因此鑽研它其中的
原理對於人工智慧的精進是十分有效的,為此,我們想要利用類似 MNIST 的方
式,自己從頭(資料的收集、預處理)到尾(預測成果評估),去實際的進行操作,
以累積自己的經驗。
2、 實驗內容
經過討論,我們選擇要進行辨識的主題是中文的數字,範圍為:一、二、三、
四、五、六、七、八、九、十,而最終的目的就是想要透過不斷的測試不同參
數,而達到擁有最高圖像辨識能力的 model,為了要達到這個任務,我們會針
對圖像在預處理時的處理程度(原始圖像、灰階處理、二值化處理),以及在卷積
層數量上的差異分別進行測試,並在比較後得到最理想的結果。
3、 實驗方法(程式碼)
(1) 資料庫的建立
1. 利用文書軟體當中國字上的不同字型,可以獲得很多不同的數據,因此
經過處理,我們得到了 90 種字體一到十共 900 張的圖片。(左圖)

2. 利用每次手寫上的微小差異,再搭配上比畫粗細的設定,亦可以創造一
定數量的數據,再一番的努力之後,我們亦得到了 171 張圖片。(右圖)
在獲得了原始的圖片共 1071 筆數據之後,我們還可以透過旋轉、翻轉圖片,
擴充用來訓練的樣本數。其中翻轉有一組,旋轉則分十二組:-30 ゚、
-25 ゚、-20 ゚、-15 ゚、-10 ゚、-5 ゚、5 ゚、10 ゚、15 ゚、20 ゚、25 ゚、30 ゚,再
加上原本的圖片即有 14 組的圖片。換算下來共 14994 張圖片。有了如此的
規模之後,就可以往下一步的步驟進行了。
(此為圖片旋轉以及翻轉 function 的程式碼)
(二)資料輸入
由於這次的專題報告為小組的作業,因此會將資料放在 google 共用雲
端硬碟上面,進行資料上的共享。因此在訓練 AI 的前置作業:資料的輸入
時,亦需要相應的處理方式:

經過查詢,我們發現利用上方的程式碼,即可直接讀取硬碟內所存放的資
料了。
(三)旋轉、翻轉與資料預處理
由於資料擴充的方式,在前文中已經有提及,因此在此就不再多做贅述。

在此處,我們想要了解不同的圖像處理方式是否會對於學習的結果產生影
響,因此在接下來的處理中,我們將處理方式分為四種:
1. 以原始的圖片資料進行辨識,初始神經元數為 28*28*3
2. 將原始的圖片做灰階處理,可以獲得初始神經元數 28*28
3. 將灰階後的圖片做二值化處理,雖然初始神經元數亦為 28*28,但數值
差異更為明顯
4. 我們亦好奇,若是以資料中不同字體、較為端正的資料作為訓練集,而
手寫(現實中)的資料做為測試集,有沒有可能出現什麼特殊的狀況。於
是也出現了此一處理方式
由於四種不同的處理方法只有在資料預處理的過程有部分的差異,因此在
此應無必要皆放置於報告書上,故於上文以口頭說明的方式表達四種處理
方式的細節,而之後的程式碼,則以方案二的灰階處理作為範例,說明接
下來的步驟。
在處理完了資料擴充的部分後,仍有一件是需要被完成,那就是資料的順
序,若是資料的內容整齊的排列放入 model 當中,在 epoch 的過程中可能
會有資料選取上的疑慮,因此,我們將整理好的資料進行亂數排列。

再來,如同 MNIST,中文符號的辨識,也有十個最終的可能結果,因此也
需要對神經元最終結果的對應上作一些調整。為此,我們需要預先作 one
hot encoding 的動作。

最後,資料庫已然到手,但是還需要把它們分成訓練集還有測試集,在考
慮過後,我們拆出了資料庫當中的 1500 筆資料作為測試集,剩下的 13494
比數據則做為訓練集,分別用 test、train 來做表示:

(四)設定 model
在設定 model 時,目前階段下,最重要的一個環節就是 loss function 以
及 optimizer 的選擇,經過查詢可以了解,回歸問題與分類問題的最大差別
就是,回歸問題用於分辨眾多的可能相似之物件,而分類問題則是用來判
斷兩種兩個基本相反的物件,套用到我們目前的專題,十個數字的分辨屬
於回歸問題,而反觀我們使用的「mean_squared_error」中譯:最小平方
誤差,在計算標準差時即會用到,而標準差亦是在計算線性回歸線時的必
要數值,故確實為處理回歸問題的 loss function,至於 optimizer 的部分,
則是經過了神祕又奧妙的抉擇以及判斷後,我們決定採用「RMSprop」來
進行 model 的訓練。
4、 實驗結果、討論
(1) 初級輸出結果(以灰階為例)
在收集資料的時候,皆會重複進行十次之後,在記錄起來進行統計(少數
資料重複紀錄了更多組),而下面即以灰階(epochs3000 次、池化 3 層)的數
據做為範例呈現於報告當中。

(2) 數據整理
編號 圖片 Epochs 池化 平均成功率 最大成功率
狀態 次數 層數
第一組 原始 2000 2 0.42349 0.7713
第二組 原始 3000 3 0.36606 0.5507
第三組 灰階 2000 2 0.30127 0.58
第四組 灰階 3000 2 0.25632 0.62
第五組 灰階 3000 3 0.53039 0.662
除了原始的圖片資料,以及經過灰階處理的資料,我們還打算要再使用二
值化的圖像處理技術(將圖片當中色值大於某值即設定為白色,反之則設定
為黑色)去嘗試訓練,可是問題是,我們對於決定二值化狀態的「閥值」應
該設定為多少而感到困惑。為了要解決這個問題,經過初步的測試之後,
我們決定要分別測試在不同閥值之下的訓練結果何者為最佳,然後再將該
組資料作為我們的最終測試資料。(除了閥值以外的其他數據則保持統一,
維持著控制變因),測試結果如下:
閥值 0.5 0.6 0.7 0.8 0.9 0.95 0.98 1
平均成 0.78 0.85 0.89 0.91 0.93 0.92 0.93 0.92
功率
若是把上頁當中的表格用摺線圖的方式呈現的話,則會如下圖所示:

從上述的數據可以發現到,在我們目前的資料內容下,最適合二值化處理
的閥值落在 0.9 的數值,因此在接下來的討論當中,我們對於二值化的數
據分析皆會以 0.9 閥值下的數據為主。而我們也可以記下以下數據。
編號 圖片狀態 Epochs 次 池化層數 平均成功 最大成功
數 率 率
第六組 二值化 3000 3 0.93354 0.9487

除了上方對於圖像處理方式的測試數據,我們亦如同前文所說的,只利用
不同字體在原始或者灰階處理的電腦文字進行 model 的訓練,並使用此
model 對更多的電腦文字或是手寫文字進行預測,而預測後的結果入下(在
本次的測試中,皆採用了 epochs 次數 3000 次,池化層的層數則為 3 層,
保有良好的控制變因):

(字體類型資料範例) (手寫類型資料範例)
1.原始圖像(28*28*3)
辨識對象 平均成功率 最大成功率
字體類型資料 0.38041 0.6111
手寫類型資料 0.21349 0.2978

2.灰階圖像(28*28)
辨識對象 平均成功率 最大成功率
字體類型資料 0.60277 0.7746
手寫類型資料 0.28871 0.3275
(3) 輸出結果分析
1. model 的訓練方式
首先,我們想要測試的是,model 訓練時的 epochs 以及池化層數的影
響,於是,我們針對第三組、第四組及第五組的預測結果進行比對,得
到了結果如下:

由上方的兩個摺線圖,可以明顯地發現到,無論是平均數據亦或是尖端
最大值,普遍上來說,越多的執行次數以及越深的池化層數都能夠導致
更高的辨識成功率,因此我們可以瞭解到,適度的增加執行次數以及足
夠複雜的神經網路對於 CNN 的發揮擁有正相關的效果。
2. 輸入圖像的處理方式
有了上文當中的測試,我們可以知道,要讓 AI 的效果發揮得更好,
就必須使用足夠多的 epochs 以及池化層數,因此在此次的訓練當中,
我們皆選用了 3000 次的執行次數以及三層池化層的數據(第二組以及第

五組),測試數據如下:
另外,我們也用了只透過字體類型資料的 model 去測試不同的圖像處理
方式的預測能力,亦得到了下一頁當中的摺線圖:
經過了這次的測試,我們發現,無論是普通的 model 又或是只使用字體
類型資料進行訓練的 model,經過灰階效果的圖片(28*28 陣列),在預
測的能力上高於利用普通圖片(28*28*3 陣列)進行訓練的 model,而二
值化後的圖片數據經過訓練得到的 model,在成功率上更是遠超其他兩
種圖像處理法的預測結果。針對此,我們推測,經過灰階處理的圖片,
可能可以有效地去除掉一些圖片上的干擾資訊(例如在字體的資料中,
可能會因為圖片像素數過低而出現類似於色差的殘影在數字符號的外
圍),因此在辨識圖片的效用上具有更好的效果,而二值化透過強化極
端值的處理方式,更加地發揮了灰階效果的功效。由此次的測試,我們
了解到,對輸入圖片的處理亦可以對於 AI 訓練有意想不到的功效。
3. 輸入資料的豐富度
對於僅用字體類型資料進行訓練的 model 之測試,比較結果如下:

我們可以從測試資料當中觀察到,只針對字體類型資料進行訓練的 AI,
在只判斷字體類型資料時,擁有比普通 model 還要更加出色的預測成功
率。可是問題是,比起針對相同的字體類型資料進行預測,對於手寫類
型資料的預測是沒有能力應付的。對於此現象的推測亦再明確不過,機
器學習的過程仍然有其侷限性,因此在訓練的過程當中,就應該要事先
對其目標的預測物件進行審查,並做出相應的訓練方式、計畫以及素
材。
5、 結論
經過一個學期對於基礎人工智慧的選修課程,我們從中認識了很多之前未曾
深入了解的學問,而透過這次的期末專題,也對於人工智能的細節上有了更清
楚、更廣泛的了解,收穫良多。

p.s.雖然在上文當中並沒有提及,在我們的所有測試結果當中,擁有最高的辨
識成功率者 94.87%,可喜可賀…......................................

You might also like