Tensorflow搭建CNN实现验证码识别
完整代码:GitHub
我的简书:Awesome_Tang的简书
更好的阅读体验可访问我的Kesci Lab:AwesomeTang的Kesci Lab
整个项目代码分为三部分:
Generrate_Captcha:- 生成验证码图片(训练集,验证集和测试集);
- 读取图片数据和标签(标签即为图片文件名);
cnn_model:卷积神经网络;driver:模型训练及评估。
Generate Captcha
配置项
class Config(object):
width = 160 # 验证码图片的宽
height = 60 # 验证码图片的高
char_num = 4 # 验证码字符个数
characters = range(10) # 数字[0,9]
test_folder = 'test' # 测试集文件夹,下同
train_folder = 'train'
validation_folder = 'validation'
tensorboard_folder = 'tensorboard' # tensorboard的log路径
generate_num = (5000, 500, 500) # 训练集,验证集和测试集数量
alpha = 1e-3 # 学习率
Epoch = 100 # 训练轮次
batch_size = 64 # 批次数量
keep_prob = 0.5 # dropout比例
print_per_batch = 20 # 每多少次输出结果
save_per_batch = 20 # 每多少次写入tensorboard
生成验证码(class Generate)
- 验证码图片示例:
check_path():检查文件夹是否存在,如不存在则创建。gen_captcha():生成验证码方法,写入之前检查是否以存在,如存在重新生成。
读取数据(classs ReadData)
read_data():返回图片数组(numpy.array格式)和标签(即文件名);label2vec():将文件名转为向量;例:
label = '1327' label_vec = [0,1,0,0,0,0,0,0,0,0,
0,0,0,1,0,0,0,0,0,0,
0,0,1,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,1,0,0]
load_data():加载文件夹下所有图片,返回图片数组,标签和图片数量。
定义模型(cnn_model)
采用三层卷积,filter_size均为5,为避免过拟合,每层卷积后面均接dropout操作,最终将$16060$的图像转为$208$的矩阵。
- 大致结构如下:
训练&评估
next_batch():迭代器,分批次返还数据;feed_data():给模型“喂”数据;x:图像数组;y:图像标签;keep_prob:dropout比例;
evaluate():模型评估,用于验证集和测试集。run_model():训练&评估
目前效果
目前经过4000次迭代训练集准确率可达99%以上,测试集准确率93%,还是存在一点过拟合,不过现在模型是基于CPU训练的,完成一次训练耗费时间大约4个小时左右,后续调整了再进行更新。
Images for train :10000, for validation : 1000, for test : 1000
Epoch : 1
Step 0, train_acc: 7.42%, train_loss: 1.43, val_acc: 9.85%, val_loss: 1.40, improved:*
Step 20, train_acc: 12.50%, train_loss: 0.46, val_acc: 10.35%, val_loss: 0.46, improved:*
Step 40, train_acc: 9.38%, train_loss: 0.37, val_acc: 10.10%, val_loss: 0.37, improved:
Step 60, train_acc: 7.42%, train_loss: 0.34, val_acc: 10.25%, val_loss: 0.34, improved:
Step 80, train_acc: 7.81%, train_loss: 0.33, val_acc: 9.82%, val_loss: 0.33, improved:
Step 100, train_acc: 12.11%, train_loss: 0.33, val_acc: 10.00%, val_loss: 0.33, improved:
Step 120, train_acc: 9.77%, train_loss: 0.33, val_acc: 10.07%, val_loss: 0.33, improved:
Step 140, train_acc: 8.98%, train_loss: 0.33, val_acc: 10.40%, val_loss: 0.33, improved:*
Epoch : 2
Step 160, train_acc: 8.20%, train_loss: 0.33, val_acc: 10.52%, val_loss: 0.33, improved:*
...
Epoch : 51
Step 7860, train_acc: 100.00%, train_loss: 0.01, val_acc: 92.37%, val_loss: 0.08, improved:
Step 7880, train_acc: 99.61%, train_loss: 0.01, val_acc: 92.28%, val_loss: 0.08, improved:
Step 7900, train_acc: 100.00%, train_loss: 0.01, val_acc: 92.42%, val_loss: 0.08, improved:
Step 7920, train_acc: 100.00%, train_loss: 0.00, val_acc: 92.83%, val_loss: 0.08, improved:
Step 7940, train_acc: 100.00%, train_loss: 0.01, val_acc: 92.77%, val_loss: 0.08, improved:
Step 7960, train_acc: 100.00%, train_loss: 0.01, val_acc: 92.68%, val_loss: 0.08, improved:
Step 7980, train_acc: 100.00%, train_loss: 0.00, val_acc: 92.63%, val_loss: 0.09, improved:
No improvement for over 1000 steps, auto-stopping....
Test accuracy: 93.00%, loss: 0.08
- Tensorboard
每次训练之前将Tensorboard路径下的文件删除,不然趋势图上会凌乱。- Accurracy
- loss
- Accurracy
Tensorflow搭建CNN实现验证码识别的更多相关文章
- 使用tensorflow搭建自己的验证码识别系统
目录 准备验证码数据 保存为tfrecords文件 验证码训练 学习tensorflow有一段时间了,想做点东西来练一下手.为了更有意思点,下面将搭建一个简单的验证码识别系统. 准备验证码数据 下面将 ...
- [DL学习笔记]从人工神经网络到卷积神经网络_3_使用tensorflow搭建CNN来分类not_MNIST数据(有一些问题)
3:用tensorflow搭个神经网络出来 为什么用tensorflow呢,应为谷歌是亲爹啊,虽然有些人说caffe更适合图像啊mxnet效率更高等等,但爸爸就是爸爸,Android都能那么火,一个道 ...
- 使用卷积神经网络CNN完成验证码识别
gen_sample_by_captcha.py 生成验证码图片 # -*- coding: UTF-8 -*- """ 使用captcha lib生成验证码(前提:pi ...
- 使用tensorflow实现cnn进行mnist识别
第一个CNN代码,暂时对于CNN的BP还不熟悉.但是通过这个代码对于tensorflow的运行机制有了初步的理解 ''' softmax classifier for mnist created on ...
- 机器学习: Tensor Flow with CNN 做表情识别
我们利用 TensorFlow 构造 CNN 做表情识别,我们用的是FER-2013 这个数据库, 这个数据库一共有 35887 张人脸图像,这里只是做一个简单到仿真实验,为了计算方便,我们用其中到 ...
- 强智教务系统验证码识别 Tensorflow CNN
强智教务系统验证码识别 Tensorflow CNN 一直都是使用API取得数据,但是API提供的数据较少,且为了防止API关闭,先把验证码问题解决 使用Tensorflow训练模型,强智教务系统的验 ...
- keras入门(三)搭建CNN模型破解网站验证码
项目介绍 在文章CNN大战验证码中,我们利用TensorFlow搭建了简单的CNN模型来破解某个网站的验证码.验证码如下: 在本文中,我们将会用Keras来搭建一个稍微复杂的CNN模型来破解以上的 ...
- CNN+BLSTM+CTC的验证码识别从训练到部署
项目地址:https://github.com/kerlomz/captcha_trainer 1. 前言 本项目适用于Python3.6,GPU>=NVIDIA GTX1050Ti,原mast ...
- tensorflow训练验证码识别模型
tensorflow训练验证码识别模型的样本可以使用captcha生成,captcha在linux中的安装也很简单: pip install captcha 生成验证码: # -*- coding: ...
随机推荐
- Matplotlib 设置
# 导入相关模块 import matplotlib.pyplot as plt import numpy as np 设置 figure Matplotlib 绘制的图形都在一个默认的 figure ...
- CSPS模拟 100
我又挂分了T_T 这么吉利的数字..本来想考的好一点的 T1 没加当前弧优化(其实也不会),若志了 各种低错连篇而且没想到点不联通..没有奇度点就直接从1开始搜了 于是喜提70(犯了这两个若志错误应该 ...
- ASP.NET Core Blazor 用Inspinia静态页模板搭建简易后台(实现菜单选中)
Blazor 是一个用于使用 .NET 生成交互式客户端 Web UI 的框架: 使用 C# 代替 JavaScript 来创建丰富的交互式 UI. 共享使用 .NET 编写的服务器端和客户端应用逻辑 ...
- 问题 C: 「Usaco2010 Dec」奶牛健美操O(∩_∩)O
题目描述 Farmer John为了保持奶牛们的健康,让可怜的奶牛们不停在牧场之间的小路上奔跑.这些奶牛的路径集合可以被表示成一个点集和一些连接 两个顶点的双向路,使得每对点之间恰好有一条简单路径. ...
- VIM编辑器的常用命令及使用!
在热门Linux操作系统中都会默认安装一款超好用的文本编辑器——名字叫“vim”,vim是vi编辑器的升级版. Vim能够得到这么多厂商与用户的认可,原因就是在Vim编辑器中有三种模式——命令模式.末 ...
- 从壹开始 [ Ids4实战 ] 之五 ║ 多项目集成统一认证中心的思考
前言 哈喽大家好,好久都没有写文章了,这次又重新开始写技术文章了,半年前我还是一直保持每周都写文章的,后来是为了响应群友的号召,开始踏上了录制视频(https://www.bilibili.com/v ...
- python入门之五种字典创建方法
a = dict(one = 1, tow = 2, three = 3)b = {'one' :1,'tow' :2 , 'three' :3}c = dict (zip(['one', 'tow' ...
- 易初大数据 2019年11月13日 Linux 王庆超
★安装Red Hat Enterprise Linux7.41 ◆1通过键盘的方向键选择“lnstall Red Hat Enterprise Linux7.4”选项来直接安装Linux 系统. ◆2 ...
- linux内核崩溃之kdump机制
kdump相关概念 standard(production) kernel 生产内核 ,是指我们正在使用的kernel. Crash(capture)kernel 捕 ...
- Flutter之环境配置与项目搭建
Flutter之环境配置与项目搭建 一,介绍 1.1,Dart Dart 是一种 易于学习. 易于扩展.并且可以部署到 任何地方 的 应用 编程 语言.并且同时借鉴了Java和JavaScript.D ...