model.predict_classes()
进行预测,这是我的代码:
import numpy as np
import os,sys
from keras.models import load_model
import PIL
from PIL import Image
import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline
model = load_model('./potholes16_2.h5')
model.compile (loss = 'binary_crossentropy',
optimizer = 'adam',
metric = ['accuracy'])
path= os.path.abspath("./potholes14/test/positive")
extensions = 'JPG'
if __name__ == "__main__":
for f in os.listdir(path):
if os.path.isfile(os.path.join(path,f)):
f_text, f_ext= os.path.splitext(f)
f_ext= f_ext[1:].upper()
if f_ext in extensions:
print (f)`enter code here`
img = Image.open(os.path.join(path,f))
new_width = 200
new_height = 200
img = img.resize((new_width, new_height), Image.ANTIALIAS)
#width, height= image.size
img = np.reshape(img,[1,new_width,new_height,3])
classes = model.predict_classes(img)
print (classes)
现在我想计算正确预测的图像总数,例如有多少类属于0级或1级?
谢谢。
答案 0 :(得分:0)
您需要调用model.evaluate
函数;假设您要使用x_test
中的地面实况标签评估y_test
中的数据,那么:
score = model.evaluate(x_test, y_test, verbose=0)
score[0]
将为您提供损失(在您的情况下为二进制交叉熵),而score[1]
包含所需的二进制精度。
有关详细信息,请参阅docs(向下滚动查找evaluate
)。
答案 1 :(得分:0)
您必须拥有正确预测的数据样本数组吗?那么你也可以加载这些数据。保留你的代码,
classes = model.predict_classes(img)
产量
array([[ 0.94981687],[ 0.57888238],[ 0.58651019],[ 0.30058956],[ 0.21879381]])
,您的班级数据如下所示
class_validation = np.array([[1],[0],[0],[0],[1]])
然后找到相等的一次舍入classes
np.where(np.round(classes,0)==class_validation)[0].shape[0]
注意:有很多人要写最后一行,那就是你的numpy数组是形状(number_of_sample,1)
检查的另一种方法
totalCorrect = class_validation[((np.round(classes,0) - class_validation)==0)]
print('Correct in Class 1 = ',np.count_nonzero(totalCorrect),'Correct in Class 0 = ',abs(len(totalCorrect)-np.count_nonzero(totalCorrect)))