keras 讀取模型進行測試的方式

2021-08-31 01:22:00 字數 3416 閱讀 4822

from keras.preprocessing import image

import numpy as np

from keras.models import load_model

import os

from shutil import copyfile

from keras.preprocessing.image import imagedatagenerator

work_dir = 'e:/pcb_image_data/data_small'

#test_data_dir = 'e:/pcb_image_data/data_small/test'

#載入模型

def read_model():

model = load_model(work_dir + '/model_weight.h5')

return model

#讀取多張

def read_img_array(img_dir):

img =

for f in os.listdir(img_dir):

image_path = os.path.join(img_dir, f)

if os.path.isfile(image_path):

images = image.load_img(image_path, target_size=(100, 100))

x = image.img_to_array(images)

x = np.expand_dims(x, axis=0)

x = np.concatenate([x for x in img])

#讀取模型進行**

model = load_model(work_dir + '/model_weight.h5')

y = model.predict(x)

return y

#單張讀取,並**

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_dir = 'e:/pcb_image_data/data_small/test'

read_test(img_dir) #測試集驗證,批量

''''''

#批量讀取檔案

y = read_img_array(img_dir)

print(y)

#根據得出識別結果

err = 0

all_n = 0

for i in range(len(y)):

all_n += 1

if y[i][0] >= 0.5:

err += 1

print('err')

acc = err/all_n

print('all',all_n)

print('acc',acc)

'''img_file = 'e:/pcb_image_data/data_small/validation/false'

model = read_model()

tc,fc = read_file_all(img_file,model)

print('true 識別率',tc,'\n','false 識別率',fc)

keras 讀取模型進行測試的方式

本篇部落格僅供自己查資料時使用。from keras.preprocessing import image import numpy as np from keras.models import load model import os from shutil import copyfile fro...

keras的回歸模型

基於keras的神經網路回歸模型 import matplotlib.pyplot as plt from math import sqrt from matplotlib import pyplot import pandas as pd from numpy import concatenate...

Keras筆記 3 關於Keras的模型型別

keras有兩種型別的模型,序貫模型 sequential 和函式式模型 model 函式式模型應用更為廣泛,序貫模型是函式式模型的一種特殊情況。兩類模型有一些方法是相同的 config model.get config model model.from config config or,for s...