1、前期经验

        关于验证码识别,试过使用传统的machine learning方式识别,在相同样本下效果还算可以,但当迁移到别的数据集时,效果不理想。

        对于使用深度学习识别验证码,尝试过使用LeNet-5、AlexNet两种卷积网络,可能是网络结构简单的原因,结果不收敛。故尝试用了RNN中的LSTM单元网络来识别,效果较理想。

 

2、原始验证码文件

 

        验证码相对来说算简单,字符没有倾斜和重叠,但有不少干扰线。

tensorflow 基于深度学习 循环神经网络 LSTM 识别验证码        tensorflow 基于深度学习 循环神经网络 LSTM 识别验证码        tensorflow 基于深度学习 循环神经网络 LSTM 识别验证码

 

3、网络结构

        此处使用了双层的LSTM作为隐含层,保留最后四个cell的输出结果,加一层full connection,并concat得到最后的输出。

tensorflow 基于深度学习 循环神经网络 LSTM 识别验证码

4、训练过程

        使用Adam算法替代梯度下降,迭代到3000次,accuracy达0.65,loss小于0.03。继续进行迭代、优化能到达更高的准确率。 tensorflow 基于深度学习 循环神经网络 LSTM 识别验证码

tensorflow 基于深度学习 循环神经网络 LSTM 识别验证码

5、总结

        由此等简单项目能体验出深度学习的厉害之处,传统机器学习由于需要人工特征工程,较为局限。深度神经网络通过构建大量参数的行为,并结合优化算法,实现自学习所有局部、抽象、高层特征。此乃区别之处。

 

 

代码地址:https://github.com/wzzzd/LSTM_captcha