如果我提供来自Keras的其他图像,我怎么能预测测试图像不是猫或狗?

时间:2017-08-30 04:27:29

标签: machine-learning keras

我使用多种类型的图像,例如鸟/猫/狗/狮子。

在epoch = 40之后

我的 testData.py 是:

from keras.models import load_model
from keras.models import Sequential
from keras.layers import Dense
from keras.models import model_from_json
import cv2, numpy as np


np.set_printoptions(precision=4, linewidth=100) 

# -------------Load Trained Model------------------------------

model = load_model('onlyModel.h5')
print('Loaded model from disk')

# -------------Load and Pre process Test img ----------------
img = cv2.resize(cv2.imread('a.jpg'), (150, 150))
img = np.reshape(img,[1,150,150,3])
array = np.asarray(img, dtype='int32')
array = array / 255

# --------------------Predictions------------------------------
predict = model.predict(array)
classes = model.predict_classes(array)            

print('Prediction is = ', predict)
print('predict_class is = ',classes )
# ------------------Result--------------------------------------
if classes  == 0:
    print ('It is a Bird')
elif classes  == 1:
    print ('It is Cat')
elif classes  == 2:
    print ('It is Dog')
elif classes  == 3:
    print ('It is Lion')    
else:
    print ('N/A')   

# ------------------------------------------------  

在我提供狗图像时正确提供输出:

enter image description here

但这并不能预测狮子图像?

如果有的话,请更正我的代码错误。我是新来的。还建议最好的方法比这个。

2 个答案:

答案 0 :(得分:2)

在我看来,你只用猫和狗训练你的模型是分类变量,你很可能使用它们的数字等价物。您应该更新数据集和模型,以包含既不是猫也不是狗的东西。

答案 1 :(得分:1)

您似乎只在训练模型时进行特征缩放。 rescale=1./ 255,但是当你让模型识别出狮子图像时,你并没有做同样的事情。输入会更大[0,255],您应该在重塑图像后添加这些代码:

    array = np.asarray(image, dtype='int32')
    array = array / 255

如果它不起作用,您可以考虑您的模型是否过于自信,请参阅Overfitting in classifiers leads to overconfident predictions,尝试将正则化术语添加到您的模型中。

希望它有所帮助。