在keras中對單一輸入影象進行預測並返回預測結果操作
阿新 • • 發佈:2020-07-09
模型經過訓練測試之後,我們往往用一兩張圖對模型預測結果進行分析討論,那麼下面介紹在keras中用已訓練的模型經過測試的方法。
下面是以利用預訓練的ResNet來展示預測的效果,選了一張狗的圖片,是來自一個kaggle比賽的。
預測結果第一個是一種蘇格蘭品種的狗,我也不知道準不準 == 。
import numpy as np from keras.applications.imagenet_utils import decode_predictions from keras.preprocessing import image from keras.applications import * import os # 忽略硬體加速的警告資訊 os.environ['TF_CPP_MIN_LOG_LEVEL'] = '2' file_path = 'images/0a70f64352edfef4c82c22015f0e3a20.jpg' img = image.load_img(file_path,target_size=(224,224)) x = image.img_to_array(img) x = np.expand_dims(x,axis=0) model = ResNet50(weights='imagenet') y = model.predict(x) # print(np.argmax(y)) print('Predicted:',decode_predictions(y,top=3)[0])
講幾點:
1.輸入img轉成numpy陣列,shape處理成(224,224,3)一般來講,對於預訓練模型是有一個最小的尺寸值,比最小尺寸大就可以了。在ResNet中,尺寸最小大於等於197即可。
2.要對輸入shape擴維變成(None,224,3),第一個None是batches,模型並不知道你輸入的batches是多少,但是維度必須和ResNet的輸入要一致。
3.雖然用的是ResNet,自己設計的模型也一個道理,保留一下訓練的權重,把model模組和預測模組分開寫,這個時候load一下權重,再預測即可。
補充知識:keras:怎樣使用 fit_generator 來訓練多個不同型別的輸出
這個例子非常簡單明瞭,模型由1個輸入,2個輸出,兩個輸出的分支分別使用MSE作為損失。
x = Convolution2D(8,5,subsample=(1,1))(image_input) x = Activation('relu')(x) x = Flatten()(x) x = Dense(50,W_regularizer=l2(0.0001))(x) x = Activation('relu')(x) output1 = Dense(1,activation='linear',name='output1')(x) output2 = Dense(1,name='output2')(x) model = Model(input=image_input,output=[output1,output2]) model.compile(optimizer='adam',loss={'output1': 'mean_squared_error','output2': 'mean_squared_error'})
產生訓練資料的生成器,這裡y=[y1,y2].
batch_generator(x,y,batch_size): ....transform images ....generate batch batch of size: batch_size yield(X_batch,{'output1': y1,'output2': y2} ))
之後,呼叫fit_generator
model.fit_generator(batch_generator(X_train,y_train,batch_size))
原問題連結。
以上這篇在keras中對單一輸入影象進行預測並返回預測結果操作就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支援我們。