分析理解卷积神经网络代码编写思路(以验证码识别为例)

本文以验证码识别为例,深入解析卷积神经网络(CNN)的代码编写思路。首先介绍验证码的组成,每个验证码由4个大写字母构成,共有104种可能。接着分析预测值模块,CNN输出104个预测值,并通过softmax转换为概率。再看目标值模块,使用one_hot编码表示类别。最后,通过交叉熵损失函数计算损失,采用梯度下降优化,使模型能准确识别验证码。
摘要由CSDN通过智能技术生成

识别验证码:验证码由4位大写字母组成即A-Z,共4*26类(104种可能性)
比如一个验证码:NZPP
预测值模块分析:
先求输出值:每个样本都是4个大写字母组成,所以,经过卷积–>激活–>池化等操作,输出26 * 4=104个预测值,输出值大小[None, 4 * 26],
**计算输出值概率:**使用softmax=(e^x /(ex1+…+exn) )函数,将输出值转为概率
目标值模块分析
类别:A-Z,使用数字表示,A:0,B :1,…,Z:25
然后将对应的字母使用one_hot编码,所在位置记为1,其余为0
所以,使用one_hot编码:NZPP=[0,0,…,1,…,0] [0,0,…,1][0,0,0,…,1,…0][0,0,0,…,1,…0]
拿到输出值,进行交叉熵损失计算:
即输出值概率和目标值进行计算,
某个样本的损失loss=-(y_true)log(y_predict),其中y_true为one_hot 编码的真实值,y_predict是一个概率值
one_hot编码为0的,与预测概率相乘都为0,所以得到:
step1: 损失值loss= 1 * log(y_predict(N))+1 * log(y_predict(Z))+ 1 * log(y_predict§) + 1 * log(y_predict§)
step2:
优化,通过梯度下降进行优化,使得损失最小,让目标值为1的位置概率相对较大
一下是验证码识别部分的代码,文件转换部分代码未添加

     import tensorflow as tf

from deep.mnist import full_connected

FLAGS = tf.app.flags.FLAGS
tf.app.flags.DEFINE_string("captcha_dir", "./tfrecords/captcha.tfrecords","验证码数据的路径")
tf.app.flags.DEFINE_integer("batch_size", 100,"每批次训练的样本数")
tf.app.flags.DEFINE_integer("label_num",4,"每个样本的目标数量值")
tf.app.flags.DEFINE_integer("letter——num",100,"每个目标值取得字母的可能性个数")
#定义一个初始化权重的函数
def weight_variables(shape):
    w = tf.compat.v1.Variable(tf.random_normal_initializer(shape=shape, mean=0.0, stddev=1.0))
    return w
#定义一个初始化偏置的函数
def bias_variables(shape):
    b 
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值