我使用多种类型的图像,例如鸟/猫/狗/狮子。
在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')
# ------------------------------------------------
在我提供狗图像时正确提供输出:
但这并不能预测狮子图像?
如果有的话,请更正我的代码错误。我是新来的。还建议最好的方法比这个。
答案 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,尝试将正则化术语添加到您的模型中。
希望它有所帮助。