一次可預測多張圖片

爲什麼我要寫這篇博客呢?因爲我剛開始學習深度學習的時候,什麼都不懂,網上好多代碼調用一次模型都是預測一張圖片。然後我對一個文件夾的圖片進行預測,調用了一個文件夾圖片數量次模型!我太傻了。。。

訓練模型部分我就不說了,下面介紹模型預測部分:(代碼環境是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幣 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章