完整代码: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

最新文章

  1. Visual SVN 5.01 Po jie 笔记
  2. ngCordova插件安装使用
  3. MySQL数据库的基本数据类型
  4. ==与equal在java中应用的感悟
  5. 文字排版--斜体(font-style)
  6. C# System.Guid.NewGuid() 【转】
  7. ASP.NET MVC 使用TryUpdateModel 更新的技巧
  8. 写给初学前端工程师的一封信 (转于Kejun)
  9. Java IO流学习总结八:Commons IO 2.5-IOUtils
  10. Github站点英文翻译
  11. demo_3
  12. java this关键字的使用
  13. Python云图——WordCloud了解一下
  14. 线性、逻辑回归的java实现
  15. CentOS7.x编译安装nginx,实现HTTP2
  16. 转型、自助、移动—BI市场的应用盘点
  17. tensorflow variable的保存和修改(加载一部分variable到新的model中)
  18. HTTP 接口响应数据解析
  19. python 元组中元组转为字典
  20. 百度Android在线语音识别SDK用法

热门文章

  1. 等距结点下的Newton插值多项式系数计算(向前差分)
  2. Pandas常用基本功能
  3. [考试反思]0819NOIP模拟测试26:荒芜
  4. 持续集成Gitlab CICD Runner&Jenkins
  5. requests保存图片
  6. 性能监视器PerfMon v2.0 是一个流氓的汉化版
  7. java.lang.NoSuchMethodError: org.apache.tomcat.JarScanner.scan(Ljavax/servlet/ServletContext;Ljava/lang/ClassLoader;Lorg/apache/tomcat/JarScannerCallback;Ljava/util/Set;)V
  8. 快速搭建 SpringCloud 微服务开发环境的脚手架
  9. LinearLayout适配不同机型技巧
  10. LoadRunner 录制问题集锦