使用TensorFlow自动识别验证码(三)

先知安全技术社区独家发表本文,如需要转载,请先联系先知案件技术社区授权;未经授权请勿转载。

0X000 前言

这是该 系列的第三篇文章,

本系列最后一篇。前面几章的回顾可以看这里。

0x001 文章结构

CNN的基础

Tensorflow的CNN代码理解

调参和优化的方法介绍

本文不会对数学理论做过多的探讨,也不会深入研究原理,只对CNN基础知识和Tensorflow实现过程做一下简单的梳理。

以及常见的优化流程 毕竟是个人阅读心得,难免会有纰漏,如有错误,请及时指出。

0x002 CNN的基础知识

CNN简介

cnn 全称是 Convolutional Neural Network ,中文叫 卷积神经网络。理解这个词语需要简单来梳理几个名词:人工智能,机器学习,深度学习。

简单的来说,人工智能的实现方式包括了机器学习,而机器学习实现的方式可以通过深度学习来实现。 而CNN,简单的可以理解为是深度学习的一种实现方式(这里并不严谨!但是展开描述会非常困难,这里就不表述了。)

CNN经典结构

简单了解CNN的概念以后,我们先来看一下 CNN的几种结构。

Lenet,1986年

Alexnet,2012年

GoogleNet,2014年

VGG,2014年

Deep Residual Learning,2015年

几乎都是来自 Lennt的优化和改良。 Lenet的结构如图所示,

经典的Lennt是由

输入 INPUT(图片转置矩阵)

卷尺层 Convolution(对图片进行过滤器 输出特征图 Feature)

池化层 Pooling(也叫子采样层 图中的 Subsampling )

全联接层 FullConnection (主要对卷尺池化后的结果进行分类的结果 OUTPUT)

五个基础部分组成

图中所示结果 则是

输入->卷尺->池化->卷尺->池化->全联接->全联接->输出

这里简单说一下卷尺和池化,全联接简单的理解就是一个简单的分类函数即可。

卷尺 Convolution

卷尺构成

输入 -> 过滤器 = 输出

假设 我们有一个3x3的图像,卷尺核(又叫过滤器)为3x3的矩阵得出的结果如图

卷尺要先把卷尺核调转180度后在去计算。左上 的 -13 的计算过程如下

一个完整的卷尺过程如下

卷尺的计算类型

full

same

valid

这里有三种 我们只需先了解same就行,和意思一样 卷尺后的大小 和 卷尺前一样。

各种卷尺方式 https://github.com/vdumoulin/conv_arithmetic

卷尺作用

概念有点晕 下面举几个例子说明一下卷尺的作用

例子 1

当卷尺如下所示,对一个图像做卷尺时

(1就相当于权重,新像素点包含对应像素点与其周边像素点的综合信息,等于求平均值

得出来的图片效果 就是 模糊效果 )

例子 2

当卷尺如下所示,对一个图像做卷尺时

如果像素点周围颜色和该像素点差不多,那么得出来的值接近0 也就是黑色

如果像素点和周围的颜色差别巨大 那么就会得到一个比较大的非0值

这个矩阵的作用是检测物体的边缘值,卷尺后的效果

简单的理解卷尺对原图完成了特征抽取的工作

池化 pooling

池化的结果是使得特征减少,参数减少。

池化的类型

常见的两种池化的类型

mean-pooling 求邻近平均

max-pooling 取邻近最大

例子 :4*4 矩阵 的通过2x2的 max ooling后 如下

简单的理解池化的作用就是保持一定特征的情况下缩减图片面积

至此 我们就差不多掌握了CNN的所有的基础的概念 。那么接下来就是回顾我们上上篇文章的模型。

Tensorflow CNN的代码理解

打开captcha_model.py文件

看 first layer

那么 layer(例如 first layer,second layer) 包含了卷尺层和池化层

fully layer 则是 全连接层 ,全连接层没什么特别的地方 主要用于归类和输出结果。

那么我们编写的模型就是

输入->卷尺->池化->卷尺->池化->卷尺->池化->全联接->全联接->输出

我们对模型的原理和结构了解了以后 我们可以开始尝试优化了。

0x003调参和优化的方法介绍

我们编写的模型

输入->卷尺->池化->卷尺->池化->卷尺->池化->全联接->全联接->输出

对比 Lenet的模型

输入->卷尺->池化->卷尺->池化->全联接->全联接->输出

可以看到仅仅是比 Lenet的模型 多了一个 卷尺->池化 的过程,

实际上 关于图片分类的CNN结构 我们都可以用一个正则表达式表示:

输入 -> ( 卷尺+ -> 池化? )+ -> 全联接+ -> 输出

![注:池化层可以去掉的原因是因为有论文表明 池化的过程可以通过调整卷尺过滤器的步长来完成]

所以 根据我们所掌握的原理 有以下几种方式去优化我们的模型,大部分是修改过滤器的参数

padding 图像大小 使其接近2的倍数

修改过滤器的大小。我们这里的过滤器是5*5 一般来说就是用 7x7,5x5,3x3等等去试 。过滤器的大小影响特征是否更完整。

修改过滤器的步长。假设图片中有大片色块相同的区域,可以尝试把步长跳大,更快的提取特征。

修改过滤器的padding方式 。(参考上文的图)

增加或者减少( 卷尺+ -> 池化? )+

选择更加优秀的算法 FNN,Attention,迁移算法等

总的来说,就是多试,多修改模型以便于更好的提升识别率。

0x004 总结

使用tensorflow自动识别验证码 系列的基本写完了。原本还有

使用tensorflow自动识别验证码(四) 自动化批量识别验证码

但是已经和tensorflow 关系不大。无非就是通过队列和web控制台去调用这篇文章的模型去获取API去学习而已。所以暂且告一段落。

今后的重心把对图片识别转移到日志分析和威胁情报类,结合兜哥的书籍对常见的一些日志系统例ELK等等编写分析模型对tensorflow进行更深入的学习。

本文来自企鹅号 - 先知安全技术社区媒体

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏量化投资与机器学习

【深度学习研究系列】漫谈RNN之长短期记忆模型LSTM

? 推送第三日,量化投资与机器学习公众号将为大家带来一个系列的 Deep Learning 原创研究。本次深度学习系列的撰稿人为 张泽旺 ,DM-Master...

2627
来自专栏Echo is learning

machine learning 之 多元线性回归

1473
来自专栏数据派THU

教你用Python解决非平衡数据问题(附代码)

本文为你分享数据挖掘中常见的非平衡数据的处理,内容涉及到非平衡数据的解决方案和原理,以及如何使用Python这个强大的工具实现平衡的转换。

1062
来自专栏小鹏的专栏

用 TensorFlow 创建自己的 Speech Recognizer

参考资料 源码请点:https://github.com/llSourcell/tensorf... 语音识别无处不在,siri,google,讯飞输入法...

3066
来自专栏计算机视觉战队

深度学习——感受野

最近在组会讲解框架时,在感受野这个小知识点,大家开始产生歧义,今天我就简单的给大家讲解下这个小知识点,也给初学者带来一个对Receptive Field崭新的认...

4537
来自专栏数据派THU

一文读懂支持向量机SVM(附实现代码、公式)

支持向量机(SVM),一个神秘而众知的名字,在其出来就受到了莫大的追捧,号称最优秀的分类算法之一,以其简单的理论构造了复杂的算法,又以其简单的用法实现了复杂的问...

7093
来自专栏AI科技评论

大会 | DiracNets:无需跳层连接的ResNet

AI 科技评论按:本文作者 David 9,首发于作者的个人博客,AI 科技评论获其授权转载。 虚拟化技术牺牲硬件开销和性能,换来软件功能的灵活性;深度模型也类...

3796
来自专栏机器之心

开源 | 谷歌大脑提出TensorFuzz,用机器学习debug神经网络

神经网络正逐渐影响人类生活环境,包括医学诊断、自动驾驶、企业和司法决策过程、空中交通管制、以及电网控制。这些人类可以做到的事,神经网络也有可能做到。它可以拯救生...

1222
来自专栏计算机视觉战队

CVPR—II | 经典网络再现,全内容跟踪

今天首先给大家带来“YOLO”!也被上一篇“Faith”读者说对了,在此也感谢大家的关注与阅读,O(∩_∩)O谢谢 YOLO ? 看到这个封面,相信很多很多...

3625
来自专栏PaddlePaddle

技术|深度学习技术黑话合辑

1192

扫码关注云+社区

领取腾讯云代金券