iT邦幫忙

2022 iThome 鐵人賽

DAY 9
0
AI & Data

了解AI多一點點系列 第 9

【Day 9】影像辨識 -- 訓練模型

  • 分享至 

  • xImage
  •  

接著我們就要利用上回所建立好的模型架構來開始正式訓練模型啦。

訓練模式

第一步先設定模型的訓練模式。

# set train mode
model.compile(loss = "categorical_crossentropy", optimizer = "adam", metrics = ["accuracy"])

訓練模型

接著利用fit函式進行訓練,第一個參數和第二個參數分別為我們之前正規化完的訓練集特徵值以及one-hot encoding的訓練集標籤;第三個參數是保留總量的多少百分比,讓每次訓練完後可以做驗證;第四個參數和第五個參數分別是訓練的次數和每批使用的資料筆數;最後一個參數代表訓練結果的顯示模式(0為不顯示、1為詳細檢視、2為簡易顯示)。

# start training model
train_history = model.fit(x = train_feature_normalize, y = train_label_onehot,
              validation_split = 0.2, epochs = 10, batch_size = 200, verbose = 2)

評估模型

接著我們利用先前所保留下來的測試集資料,將測試集資料放入剛剛訓練完的模型之中,看看正確率為多少。看到結果顯示約為76%,由於我們只是簡單的使用兩層卷積層去訓練,因此正確率並不是很高,讀者可以在自己嘗試加入更多層或是使用其他的激勵函數來提升正確度。

# evaluate the model
scores = model.evaluate(test_feature_normalize, test_label_onehot)
print("Accuracy: ", scores[1])

預測成果

接著我們建立一個自定義函式來顯示前10筆測試集資料的圖片、標籤以及預測結果。先設定好顯示大小,這邊設定為(15, 15),讀者可以根據自己的喜好調整;接著利用for迴圈遍歷前十筆資料並利用subplot函式,讓結果可以同時顯示,我們利用title當作模型預測的結果和標籤顯示區,這樣模型預測是否正確就能夠一目瞭然了。set_xticks([])以及set_yticks()是為了讓照片的尺標能夠隱藏,這樣圖片看起來比較美觀,若是讀者不介意也可以不用加。

import matplotlib.pyplot as plt

# show images and the correctness of predictions in a table
def display_predictions(images, labels, predictions, num = 10):
    plt.gcf().set_size_inches(15, 15)
    for i in range(0, num):
        ax = plt.subplot(3, 5, i + 1)
        ax.imshow(images[i])
    
    title = "prediction = " + str(predictions[i])
    title += "\nlabel = " + str(labels[i])
      
    ax.set_title(title, fontsize = 12)
    ax.set_xticks([])
    ax.set_yticks([])
    plt.show()

展示預測

將測試集特徵值丟進模型做預測後,回傳的結果會是一個二維陣列,當中每個索引中存著辨識為貓和辨識為狗的可能性,因此我們還要先利用numpy的argmax函式將可能性最高的索引值給選出來,也就是預測結果的標籤,這也是為什麼我們最初設定標籤時要從0開始。

# predict the test set
prediction = model.predict(test_feature_normalize)
prediction = np.argmax(prediction, axis = 1)

# show the result
display_predictions(test_feature, test_label, prediction)

https://ithelp.ithome.com.tw/upload/images/20220831/20150784Li1uoQSyef.png

這樣就完成了一個簡單的CNN模型訓練了,我們只是將模型簡單、隨意的加上去直接開始訓練,但真正的模型從開始到訓練到好,是要經過多次的重複嘗試以及調整,最後才能做出一個良好的模型的。


上一篇
【Day 8】影像辨識 -- 建立CNN模型架構
下一篇
【Day 10】監督式學習/非監督式學習
系列文
了解AI多一點點30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言