[Keras] The way to read the model for testing

This blog is for your own use when searching for information. 

from keras.preprocessing import image
import numpy as np
from keras.models import load_model
import os
from keras.applications.resnet50 import preprocess_input
from shutil import copyfile
from keras.preprocessing.image import ImageDataGenerator

work_dir = ''
#载入模型
def read_model():
    model = load_model(work_dir + '/model_weight.h5')
    return model


#单张图片读取,并预测
def read_model_predict(img_path,model):
    img = image.load_img(img_path, target_size=(100, 100))
    x = image.img_to_array(img)
    x = np.expand_dims(x, axis=0)
    #print(x)

    #归一化
    amin, amax = x.min(), x.max() # 求最大最小值
    x = (x-amin)/(amax-amin)
    
    preds = model.predict(x)
    return preds

#测试数据集读取    
def read_test(test_data_dir):
    test_datagen = ImageDataGenerator(rescale=1. / 255)
    test_generator = test_datagen.flow_from_directory(
        test_data_dir,
        target_size=(100, 100),
        batch_size=64,
        class_mode='binary'
        )
    model = load_model(work_dir + '/model_weight.h5')
    score = model.evaluate_generator(test_generator,steps=1)
    print("样本准确率%s: %.2f%%" % (model.metrics_names[1], score[1] * 100))
    #y = model.evaluate_generator(test_generator, 20, max_q_size=10,workers=1, use_multiprocessing=False)
    #name_list = model.predict_generator.filenames()
    #print(name_list)
    #return y

#迭代读取文件夹下的所有文件,对每一张图片进行预测
def read_file_all(data_dir_path,model):
    right = 0
    wrong = 0
    for f in os.listdir(data_dir_path):
        image_path = os.path.join(data_dir_path, f)
        #print(f)
        if os.path.isfile(image_path):
            preds = read_model_predict(image_path,model)
            print(preds[0][0])
            if preds[0][0] >= 0.5:
                #rdst = 'E:/pcb_image_data/data_2500/right/' + f
                #copyfile(image_path, rdst)
                right += 1
            else:
                #wdst = 'E:/pcb_image_data/data_2500/wrong/' + f
                #copyfile(image_path, wdst)
                #print(preds[0][0])
                wrong += 1
        else:
            read_file_all(image_path)
    all_num = right + wrong
    Tacc = right/all_num
    Facc = wrong/all_num
    return Tacc,Facc

if __name__ == '__main__':
    img_file = '/test'
    model = read_model()
    tc,fc = read_file_all(img_file,model)
    print('True 识别率',tc,'\n','False 识别率',fc)

 

Published 190 original articles · praised 497 · 2.60 million views +

Guess you like

Origin blog.csdn.net/u013066730/article/details/104922343