爲什麼我要寫這篇博客呢?因爲我剛開始學習深度學習的時候,什麼都不懂,網上好多代碼調用一次模型都是預測一張圖片。然後我對一個文件夾的圖片進行預測,調用了一個文件夾圖片數量次模型!我太傻了。。。
訓練模型部分我就不說了,下面介紹模型預測部分:(代碼環境是tensorflow2.0)
-
讀入圖片的路徑信息、名字列表
#讀入所有圖片的路徑
test_image_path = glob.glob('圖片文件夾目錄/*.jpg')
#根據圖片的名字進行排序(因爲我的圖片是0.jpg,1.jpg,2.jpg,..全是數字命名的,就按數字大小進行排#序)
test_image_path.sort(key=lambda x:int(x.split('\\')[-1].split('.')[0]))
#使用tensorflow的Dataset改造test_image_path
data_test = tf.data.Dataset.from_tensor_slices(test_image_path)
#圖片名字列表(不包含.jpg)
img_name = [int(x.split('\\')[-1].split('.')[0]) for x in test_image_path]
-
定義一個對圖片進行預處理的函數
def load_preprocess_image(path):
image = tf.io.read_file(path)
image = tf.image.decode_jpeg(image,channels=3)
image = tf.image.resize(image,[256,256])
image = tf.cast(image,tf.float32)
image = image/255
return image
-
調用函數對圖片進行預處理,並給data_test設置batch
#給data_test應用該函數(之前data_test裏邊是圖片路徑,應用函數後就會成爲圖片)
data_test = data_test.map(load_preprocess_image)
#設置batch
data_test = data_test.batch(32)
-
最重要的一環,開始預測
predictions = model.predict(data_test)
我的代碼是用xception進行遷移學習,對貓狗進行分類,屬於二分類問題,最後在Dense層用的是softmax激活函數,所以predictions是一個0-1的概率值(也就是若大於0.5則是表示貓,小於0.5表示狗) 。因此下邊是用列表推導式進行最後的處理:
preds = [1 if x>0.5 else 0 for x in predictions]
-
存文件
import pandas as pd
data = pd.DataFrame(preds,index=img_name,columns=['result'])
完整代碼使用jupyter notebook編寫,代碼鏈接在上邊。0C幣