微博验证码识别系列四:检验模型的好坏

上期我们生成了微博验证码识别模型,这期我教大家怎么检验这个模型的好坏,在使用这个模型的时候需要先找一批不在训练集中的微博验证码图片并打上标签

# -*- coding=utf-8 -*-
from keras.models import load_model
import numpy as np
from scipy import misc
from keras.applications.xception import preprocess_input
import glob

img_size = (60, 160)
model = load_model('weibo.h5')
letter_list = [chr(i) for i in range(48, 58)] + [chr(i) for i in range(65, 91)]


def data_generator_test(data, n):  # 样本生成器,节省内存
    while True:
        batch = np.array([data[n]])
        x, y = [], []
        for img in batch:
            im = misc.imread(img)
            im = im[:, :, :3]
            im = misc.imresize(im, img_size)
            x.append(im)  # 读取resize图片,再存进x列表
            y_list = []

            real_num = img.split('.')[0].split('/')[-1]
            for i in real_num:
                i = i.upper()
                if ord(i) - ord('A') >= 0:
                    y_list.append(ord(i) - ord('A') + 10)
                else:
                    y_list.append(ord(i) - ord('0'))

            y.append(y_list)  # 把验证码标签添加到y列表,ord(i)-ord('a')把对应字母转化为数字a=0,b=1……z=26
        x = preprocess_input(np.array(x).astype(float))  # 原先是dtype=uint8转成一个纯数字的array
        y = np.array(y)

        yield x, [y[:, i] for i in range(5)]


test_samples = glob.glob(r'weiboimgs/*.jpg')


def predict2(n):
    """
    预测模型,输出其预测值和真实值
    :param n:样本下标
    :return:
    """
    x, y = next(data_generator_test(test_samples, n))
    z = model.predict(x)
    z = np.array([i.argmax(axis=1) for i in z]).T
    result = z.tolist()
    v = []
    for i in range(len(result)):
        for j in result[i]:
            v.append(letter_list[j])
    # 输出测试结果
    str = ''
    for i in v:
        str += i

    real = ''
    for i in y:
        for j in i:
            real += letter_list[j]
    return str, real


def run():
    """
    输出样本数、预测正确的数量、准确率
    :return:
    """
    n = 0
    n_right = 0
    for i in range(len(test_samples)):
        n += 1
        print('~~~~~~~~~~~~~%d~~~~~~~~~' % (n))
        predict, real = predict2(i)
        print(predict, real)
        if real == predict:
            n_right += 1
            print('real:', real)
            print('predict:', predict)
        else:
            pass
            print('real:', real)
            print('predict:', predict)
    print(n, n_right, n_right / n)


if __name__ == '__main__':
    run()

模型预测就到这里了,下期讲如何在项目中使用该模型

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

辛勤的搬砖者

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值