加载中 ...
首页 > 常见问题 正文

使用TensorFlow 来实现一个简单的验证码识别过程

2019-03-24 10:30:41 来源:沈阳软件公司 作者:沈阳软件开发

https://mmbiz.qpic.cn/mmbiz_png/yCBu7HSwemL2T3OibHChicZw5mYiazHBBibvjHhoiaTb4M1UiccHcXChy9yOhsKQnJfpBcomFmIdbKHPiav0Y4e4Nr28w/640?wx_fmt=png?x-oss-process=style/xmwebp&wxfrom=5&wx_lazy=1&wx_co=1

这里 text2vec() 要领就是将真实文本转化为 One-Hot 编码,vec2text() 要领就是将 One-Hot 编码转回真实文本。

 

例如这里挪用一下这两个要领,我们将 1234 文本转换为 One-Hot 编码,然后在将其转回来:

https://mmbiz.qpic.cn/mmbiz_png/yCBu7HSwemL2T3OibHChicZw5mYiazHBBibvanf5gtEkQLssGWdtIR9raH2fzX5lfiaVP3r5cfwJRh43ZvjicLnLfdDA/640?wx_fmt=png?x-oss-process=style/xmwebp&wxfrom=5&wx_lazy=1&wx_co=1

这样我们就可以实现文本到 One-Hot 编码的互转了。

 

接下来我们就可以结构一批数据了,x 数据就是验证码的 Numpy 数组,y 数据就是验证码的文本的 One-Hot 编码,天生内容如下:

https://mmbiz.qpic.cn/mmbiz_png/yCBu7HSwemL2T3OibHChicZw5mYiazHBBibv3mUUPnicVfJibShh67CLk4BIjtKFQVxLFhAyj8RMwtCib6ThicPgK7iaj4w/640?wx_fmt=png?x-oss-process=style/xmwebp&wxfrom=5&wx_lazy=1&wx_co=1https://mmbiz.qpic.cn/mmbiz_png/yCBu7HSwemL2T3OibHChicZw5mYiazHBBibveXWwqftIEic5Ns5nJtnfCFibicYQNiaicgICP8LBy1v0Huh7OtprSzyke9A/640?wx_fmt=png?x-oss-process=style/xmwebp&wxfrom=5&wx_lazy=1&wx_co=1

这里我们界说了一个 getrandomtext() 要领,可以随机天生验证码文本,然后接下来再使用这个随机天生的文原来发生对应的 x、y 数据,然后我们再将数据写入到 pickle 文件里,这样就完成了预处置惩罚的操作。

 

 

3.构建模子

 

有了数据之后,我们就最先构建模子吧,这里我们照旧使用 traintestsplit() 要领将数据分为三部门,训练集、开发集、验证集:

https://mmbiz.qpic.cn/mmbiz_png/yCBu7HSwemL2T3OibHChicZw5mYiazHBBibvn7rTwjY5vlqePS7pl8ibp8nwiaWpbLC8PNhDmjz7lFwfgmARiakIls0AQ/640?wx_fmt=png?x-oss-process=style/xmwebp&wxfrom=5&wx_lazy=1&wx_co=1

接下来我们使用者三个数据集构建三个 Dataset 工具:

https://mmbiz.qpic.cn/mmbiz_png/yCBu7HSwemL2T3OibHChicZw5mYiazHBBibv7v9CyBqwy8S5alm6lOmJ4D3EOs9DlepdRmU47nU69ceicNj7EGJ3lLg/640?wx_fmt=png?x-oss-process=style/xmwebp&wxfrom=5&wx_lazy=1&wx_co=1

然后初始化一个迭代器,并绑定到这个数据集上:

https://mmbiz.qpic.cn/mmbiz_png/yCBu7HSwemL2T3OibHChicZw5mYiazHBBibvGaUmTs9kWJ2tD4sicvCx8Xq9jhbksia3p9zvRxkPe1vjJ0DZ3ZyDOZ1Q/640?wx_fmt=png?x-oss-process=style/xmwebp&wxfrom=5&wx_lazy=1&wx_co=1

接下来就是要害的部门了,在这里我们使用三层卷积和两层全毗连网络举行结构,在这里为了简化写法,直接使用 TensorFlow 的 layers 模块:

https://mmbiz.qpic.cn/mmbiz_png/yCBu7HSwemL2T3OibHChicZw5mYiazHBBibvBywYXUTRFqmg36YcC4uveUKxCcg62rrcWtmwyx0UwSzaibefyO4kWkg/640?wx_fmt=png?x-oss-process=style/xmwebp&wxfrom=5&wx_lazy=1&wx_co=1

这里卷积核巨细为 3,padding 使用 SAME 模式,激活函数使用 relu。

 

经由全毗连网络变换之后,y 的 shape 就酿成了 [batchsize, nclasses],我们的 label 是 CAPTCHALENGTH 个 One-Hot 向量拼合而成的,在这里我们想使用交织熵来盘算,可是交织熵盘算的时间,label 参数向量最后一维各个元素之和必须为 1,否则盘算梯度的时间会泛起问题。详情参见 TensorFlow 的官方文档:

https://www.hvihi.com/d82/dca/63f78ff26564ebcd54b6872858/1080_75_11.4.jpg" style="height:75px; width:1080px" />

 

这样我们就可以确保最后一维是 VOCAB_LENGTH 长度,而它就是一个 One-Hot 向量,以是各元素之和肯定为 1。

然后 Loss 和 Accuracy 就好盘算了:

https://mmbiz.qpic.cn/mmbiz_png/yCBu7HSwemL2T3OibHChicZw5mYiazHBBibvokKAzNuKg5toGctKX1yy8kkVqCSAnI7JceT1HNiaicq3bsDXt9wP381Q/640?wx_fmt=png?x-oss-process=style/xmwebp&wxfrom=5&wx_lazy=1&wx_co=1

“沈阳软件公司”的新闻页面文章、图片、音频、视频等稿件均为自媒体人、第三方机构发布或转载。如稿件涉及版权等问题,请与

我们联系删除或处理,客服QQ:55506560,稿件内容仅为传递更多信息之目的,不代表本网观点,亦不代表本网站赞同

其观点或证实其内容的真实性。