基于tensorflow的验证码识别与迁移学习

作者: 孤独患者_d589 | 来源:发表于2018-12-30 21:13 被阅读5次

    验证码可以有效抵御机器自动化攻击,但是在电商销售等实际应用场景中,过于复杂和频繁的验证码识别耗费了许多人力和财力,因此,高效的验证码识别程序用于特定场合中可以降低人力成本、加快办事效率。

    进行验证码的识别,可以算作计算机视觉领域的一个小的项目。首先,需要确定任务的目标,即使程序能够自动的识别验证码。达到下图所示的效果。

    验证码识别效果图

    明确任务后,就要着手识别方法的选择,这里采用的是深度学习中图片分类任务中最常用的形式。卷积神经网络+全连接神经的组合。模型结构如下图所示

    网络结构模型图

    对于输入的图片经过两层卷积神经网络提取特征之后,再经过全连接神经网络输出各个结果的概率。进过3000次的训练之后,得到训练模型,并将其保存。对于训练的过程,我们可以对其进行可视化的展示。利用tensorboard,可以对训练过程中各个卷积层的特征提取进行一个直观的展示,而且可以对训练过程中的损失函数和准确率进行可视化的展示,观察训练的效果。如下图所示。

    训练准确率展示图

    卷积层可视化

    训练结束后,对于模型的加载,如果只需要特定的输出时,可以通过tensorboard中的计算图来找到我们需要的输出节点,如下图所示。

    模型计算图

    图中的“out/out/Softmax”就是我们想要的输出。通过加载模型后,我们可以对验证码进行预测。效果如下图所示。

    对于验证码的识别来说,由于其与其他识别,例如MNIST数据集识别存在诸多的相似之处,所以,利用这一点,可以将对于验证码识别的模型迁移到对于MNIST的识别方面。而由于MNIST数据集字体不规范,模型本身泛化能力不够强大等因素,所以需要对于模型进行fine-tune。如果不进行微调的话,结果如下所示。

    未经过微调模型预测的结果

    可见预测的效果很差。这里需要对模型的最后一层进行改进,将原先的32个输出,改为10个输出(因为MNIST数据集有10类)。对其最后一层进行训练,而保持模型的其他部分不去改变。改进后的模型,在MNIST数据集上进行训练后,进行预测的结果,如下图所示。

    经过模型微调后的预测图片

    可能有的同学会问,这么简单的MNIST手写体识别为什么要废这么大劲去进行模型的迁移。这里需要阐述的是,这里对于模型的迁移,是借鉴了迁移学习的思想,来说明迁移学习的方法。而且,我们的模型,只是对于最后的一层全连接层进行了改进,无论从准确率还是训练时间上来说,都要比完全设计一个新的模型要来的方便,不仅如此,进行模型的迁移,还节约了计算的资源(不需要对模型固定的部分进行反向传播求导),同时还实现了对于已有模型的复用。借助于迁移学习的方法,在较大的项目上会有非常大的帮助,吴恩达老师曾讲过,迁移学习将会是下一个神度学习的热门方向。

     以上就是基于tensorflow的验证码识别,并在此基础上实现对于模型的迁移。喜欢的小伙伴可以多多支持赞赏呀,您的赞赏是我莫大的动力。如果想要源码的话,还请您多多赞赏并私聊我哦,有问题大家一起探讨,多谢大家。

    相关文章

      网友评论

        本文标题:基于tensorflow的验证码识别与迁移学习

        本文链接:https://www.haomeiwen.com/subject/nnlblqtx.html