深度学习之再探验证码识别-Keras

2017-4-25 小屿 Keras

基于Keras可以快速搭建神经网络进行深度学习

卷积神经网络(Convolutional Neural Networks)是一种人工神经网络结构,常被应用于图像识别,卷积神经网络在图像识别方面能够得出优秀的识别结果

搭建出自己的神经网络后,基于卷积神经网络的处理步骤,对图像进行特征提取。首先准备一张普通的手写字母图,作为识别素材

CNN卷积神经网络强大在于它能够很好的获取到图像的核心特征,图像经过两层卷积和池化后核心特征已经很明显得显现出来,大小也被压缩了很多

input_img = Input(shape=(28, 19, 1))
cnn = Convolution2D(filters=32, kernel_size=(3, 3), name="layer_one")(input_img)
cnn = Activation('relu')(cnn)
cnn = Convolution2D(filters=32, kernel_size=(3, 3), name="layer_two")(cnn)
cnn = Activation('relu')(cnn)
cnn = MaxPooling2D(pool_size=(2, 2))(cnn)
cnn = Dropout(0.25)(cnn)
cnn = Flatten()(cnn)
cnn = Dense(250)(cnn)
cnn = Activation('relu')(cnn)
cnn = Dropout(0.5)(cnn)
cnn = Dense(36)(cnn)
cnn = Activation('softmax')(cnn)
model = Model(outputs=cnn, inputs=input_img)
model.compile(optimizer='adadelta', loss='categorical_crossentropy', metrics=['accuracy'])

训练过程使用名为Cage的开源验证码生成器来批量生成验证码

生成80004位验证码并以验证码实际字符命名,生成时候通过判断是否重名,避免覆盖导致实际数量小于生成数量

 

采用过度切割法切割验证码,得到32000个字符图片

32000张字符图集30000份用作训练,2000份用作测试,每完成一次卷积神经网络训练进行一次样本测试,训练5次的精度和损失变化

 

model.fit(x_train, y_train, epochs=100, batch_size=500)
loss, accuracy = model.evaluate(x_test, y_test)
print '\ntest loss: ', loss
print '\ntest accuracy: ', accuracy
#保存模型
model.save('my_model.h5')

由于机器配置差训练过于费时只训练了二十次,最终对此类4位验证码的综合识别率只达到了80%(单个字符识别率的4次方)。

标签: 深度学习 keras 卷积神经网络

评论:

Jayce
2017-06-10 07:57
It's spooky how clever some ppl are. Thnksa!

发表评论:

Powered by xia0yu