Test資料集驗證
1.1 單張圖檔預測
1.2 多張圖檔預測
五個模型的準確度對照表
心得
Test資料集驗證
1.1 單張圖檔預測
from tensorflow.keras.preprocessing import image
from keras.models import load_model
from keras import backend as K
import numpy as np
import os
# 關閉GPU加速功能(建議安裝無GPU版本,縮短初始化時間)
os.environ["CUDA_VISIBLE_DEVICES"] = "-1"
# 開啟800字典
words_path = './800_words.txt'
file1 = open(words_path, 'rt', encoding='Big5')
labels = list(file1.read())
file1.close()
# 載入模型
model = load_model('./model/xception_v2/Xception_retrained_v2.h5')
# 讀取照片
img_path = './data/test/丁/丁_0.jpg'
try:
img = image.load_img(img_path, target_size=(80, 80))
except Exception as e:
print(img_path, e)
# 圖檔預處理
img = image.img_to_array(img) # 灰階
img = np.expand_dims(img, axis=0) # 轉換通道
img = img/255 # rescale
# 計算機率與預測結果
pred = model.predict(img)[0]
print(pred) # 機率list
index = np.argmax(pred)
prediction = labels[index]
print(prediction) # 預測結果
圖檔
結果
1.2 多張圖檔預測:以flow_from_directory抽取每個epoch的預測樣本,再逐次載入記憶體進行預測。
from keras.preprocessing.image import ImageDataGenerator
from keras.models import load_model
from keras import backend as K
# 關閉GPU加速功能
# os.environ["CUDA_VISIBLE_DEVICES"]="-1"
# 載入模型
K.clear_session()
model = load_model('./model/densenet201_v2/10011/Densenet201_checkpoint_v2.h5')
# 設定參數
test_dir = './data/test'
batch_size = 64
target_size = (80, 80)
# 圖檔前處理
test_datagen = ImageDataGenerator(rescale=1./255)
#從Test資料集抽取每批驗證圖檔
test_generator = test_datagen.flow_from_directory(test_dir,
target_size=target_size,
batch_size=batch_size, shuffle=False)
# 驗證test準確率
test_generator.reset()
test_loss, test_acc = model.evaluate_generator(test_generator, steps=test_generator.samples//batch_size, verbose=1)
print('test acc:', test_acc)
print('test loss:', test_loss)
五個模型的準確率對照表
總結:
3.1 以前只是單純載入預訓練模型,隨機調整參數,訓練後挑選出效果不錯的模型。這是第一次看論文,耗費大量時間精力,剛開始研讀的前幾天,真的挺痛苦的,進度也因此延誤。但了解模型的核心理念與架構後,有漸入佳境的感覺,獲益良多。
3.2 由於IceptionV4最新版的預訓練模型,在Keras中有權重不匹配的問題,目前採用不載入權重的重新訓練,需要耗費更多時間。從對照圖得知,IceptionV4從頭訓練效果不好,故後續先不考慮此模型。
3.3 此外,前五天的模型架構與原理的分享,如果內文敘述有誤,歡迎大家提出意見,謝謝。
讓我們繼續看下去...