前言:
利用神经网络破解验证码,首先你得理解什么是神经网络?神经网络分为前向传播(forward propagation)和反向传播(backward propagation)我总结一下我对神经网络CNN的理解:卷积其实就是滤波的过程,神经网络的卷积一般都是互关联函数,而不是真正的卷积。不管是卷积,互关联,傅里叶变换,都是为提取特征。池化是一个降采样的过程。Relu激活函数,是为了在仿射变换之后,进行非线性变化,提升模型的表达力。具体内容参考《深度学习》这本书,或者google找一些博客,我个人推荐看博客。
代码大致解析:
创建数据集,将图像文件转换成Image实例,将图像中的文本转换成文本,进行输出。进行图片二值化处理以及降噪,在训练网络之前必须对数据进行预处理,之后将数据集划分训练集以及测试集,训练集用来训练,测试集用来检测模型的正确率。最后,用训练好的模型来预测新数据,得到准确率,在训练的时候很容易出现过拟合,过拟合具体表现就是最终模型在训练集上效果好,在测试集上效果差,模型泛化能力弱。我们解决过拟合的办法有 1.重新清洗数据,因为过拟合的原因可能是数据不纯导致的 2.增大数据的训练量 3.采用正则化方法等 提示:W权重参数的选择很重要
代码(Jupyter Notebook运行)
import numpy as np
from PIL import Image,ImageDraw,ImageFont
from skimage import transform as tf
import matplotlib.pyplot as plt
# 生成图片
def create_captcha(text,shear=0,size=(100,24)):
im = Image.new("L",size,"black") # 创建一个新对象
draw = ImageDraw.Draw(im) # 返回一个绘图对象,使以后的绘图操作发生在im上
font = ImageFont.truetype(r"Coval-BlackItalic.otf",22)