一个基于CNN的场景应用

作者| Mr J

前阵子,有不少 IP主播分析行业未来,动不动新能源、大消费、科技创新云云。

估计是年前“炒基”躺赚了一波,齐刷刷地出来刷存在感;亦或许节后没赶紧赎回,努力开播搬砖~

老 J 技术出身,闲来刷个抖音也自然少不了看看科技行业的话题。其中,某主播提及 AI 快速发展将造成劳动市场的巨变。

典型案例就是自动驾驶将会干掉滴滴司机,今后失业滴滴都没的开。瞬间焦虑起来的老J 赶紧开了罐 mini 可口可乐加上几块冰,研究起深度学习。

下面会是一个较典型的 CNN(卷积神经网络)的工程应用场景 “4位验证码的识别”。不谈理论,有用为王。(主要是理论一时半会儿讲不清也讲不透~)

基于 CNN 的 4位验证码识别

1.效果

识别准确率 86.1%,字符集长度总计 62,为英文字符(区分大小写)+ 数字。

模型测试集结果.jpg

从效果上比不上动不动几个9的业界案例,第一次还是不错的。当然与老J 关系不大,主要还是模型牛。再者用 CPU 跑模型得用天计的时间真的耗不起。

2.过程

生成图片

通过captcha库自动生成图片。分别生成训练集、验证集、测试集图片,比例为 50,000 : 5,000 : 5,000。其中,训练集用于训练模型,验证集用于评估训练效果,测试集用于检验模型泛化能力。

图片预处理

主要是做图片灰度化处理,彩色验证码图片作为训练输入无意义。

上述完成了前置的准备工作,正式切入正题。从代码量来看,准备数据占到8成以上,使用 Tensorflow 的模型本身代码量极低,佩服 佩服!

训练

模型为 4 层卷积 + 池化 + 1 层输出层。采用激活函数 softmax,适用于多分类问题。

考虑到效率以及防止过拟合,训练样本数 20000 ,耗时 7 h,loss 为 0.2左右时停止训练(过于耗时)。

loss 目标值在 0.1 较为理想,预期识别准确率能稳定在 90% 以上,也就是 loss 值越低越接近真实,但也要防止过度拟合。

训练20k模型.jpg

验证

经过训练 20k后,对模型进行评估。

验证模型结果.jpg

测试

最终,如第一张效果图,训练识别正确率为 86.1%。

模型测试集结果.jpg

小结

1、CNN 作为深度学习热门的神经网络,有着参数少、训练快、得分高、易迁移的特点,得到广泛的应用。该门领域概念较多,上述应用中,权重、偏置量、学习率、Dropout等配置均采用典型设置。

2、采用 CPU 进行模型训练效率偏低,一个step平均在1.5s左右。有条件的可以采用 GPU 并行处理。验证、测试环节速度较快,基本秒回结果。

3、本次应用采用的深度学习框架为 Tensorflow,其它常见的框架还有 keras、Torch、caffe、theano、lasagne。

4、激活函数采用 softmax 处理多分类问题。常见的还有 sigmoid 处理二分类问题,在隐藏层使用的 ReLU、LeakyReLU 以及 Tanh。

最后,CNN 本质是基于特征提取,加上卷积运算的神经网络。概念容易理解,理论推倒繁杂,尤其涉及到向量计算。再者,参数的调配(fine tune)需要大量的实践,样本数量与训练效率的平衡也无定式可言。总之,要花时间慢慢摸索,在此老J 也就是抛砖引玉,希望能对大伙儿有所启发。

关注作者公号,回复 captcha 获取源码 。

-END-

你可能感兴趣的:(一个基于CNN的场景应用)