基于神经网络破解验证码

本文介绍了如何使用神经网络,特别是卷积神经网络(CNN),来破解验证码。内容涵盖了神经网络的基础,包括前向传播、反向传播以及卷积、池化和激活函数的作用。通过数据预处理、训练集和测试集的划分,训练模型并解决过拟合问题。最终,模型在训练集上达到0.99的准确率,但对验证码的每个字母识别仍有改进空间。
摘要由CSDN通过智能技术生成

前言:
利用神经网络破解验证码,首先你得理解什么是神经网络?神经网络分为前向传播(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)
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值