【ケラス】テスト用モデルの読み方

このブログは、自分で情報を検索するためのものです。 

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)

 

彼は190元の記事を発表 ウォンの賞賛497の ビュー206万+

おすすめ

転載: blog.csdn.net/u013066730/article/details/104922343