深度学习_1_神经网络_3_验证码识别

验证码识别

1,分割

2,整体识别 一张图片n个字母 即不再是一个目标值,是n个

? 例:NZPP

? N ------>[0.01,0.02,0.03.......] 概率 N------->[0,0,0,0,1.......] one-hot编码

? Z-------->[0.01,0.02,0.03.......] Z------->[0,1,0,0,0......]

? 最后得出n*26个概率

? 交叉熵计算

? 目标值:[0,0,0,1......] [0,0,0,1......] [0,0,0,1......] [0,0,0,1......]

? 经过网络输出:[1.2,2.3,5.6......]

? 经过softmax得出概率:[0.01,0.02,.......]

? 损失:104 个目标值m与概率n值相乘 mlogn,one-hot由于很多为0 最可得出一个样本的损失值为:1log()+1log()+1log()+1log()=损失值

验证码案例

1,处理数据 图片-----标签 图片路径-->序号-->验证码值----->转化为数字

使用tfrecords

2,识别验证码

  • x = [100,20*80*3]

    ? w=[20*80*3,4*26] bias=[4*26]

    ? y_predict = [100,4*26](这得出概率值)

  • 先把目标值[100,4] 转化为one_hot编码 ---->[100,4,26]

    ? Api:tf.ont_hot([[13,25,11,24],[....],[...]],depth=26,axis=2,on_value=1.0)

    ? 将目标值转化为[100,4*26] 与预测值交叉熵计算

  • 梯度下降优化
  • 精确值

    tf.equal(tf.argmax(y_true,2),tf.argmax(y_predict,2)) [100,4,26] 2 ---->26

    再求平均值

import tensorflow as tf

FLAGS = tf.flags.FLAGS
tf.flags.DEFINE_string("captcha_dir", "dataPath/.tfrecords", "验证码文件路径")
tf.flags.DEFINE_string("batch_size", 100, "每批次训练的样本数")
tf.flags.DEFINE_string("letter_num", 26, "目标值的分类")
tf.flags.DEFINE_string("label_num", 4, "目标值个数")
tf.flags._FlagValuesWrapper

# 定义一个权重初始化函数
def weight_variables(shape):
    weight = tf.Variable(tf.random_normal(mean=0.0, stddev=1.0, shape=shape), name="w")
    return weight

# 定义一个权重初始化函数
def bias_Variables(shape):
    bias = tf.Variable(tf.constant(0.0, shape=shape), name="b")
    return bias

def read_and_decode():
    """
    读取数据API
    :return:image_batch,label_batch
    """
    # 1,构建文件队列
    file_queue = tf.train.start_queue_runners([FLAGS.captcha_dir])
    # 2,构建阅读器,读取文件内容,默认一个样本
    reader = tf.TFRecordReader()
    # 3,读取文件内容
    key, value = reader.read(file_queue)
    # tfrecords 格式需要解析
    features = tf.parse_single_example(value, features={
        "image": tf.FixedLengthFeature([], tf.string),
        "label": tf.FixedLengthFeature([], tf.string),
    })
    # 解析内容,字符串内容
    image = tf.decode_rwa(features["image"], tf.uint8)
    label = tf.decode_rwa(features["label"], tf.uint8)
    # 改变形状
    image_reshape = tf.reshape(image, [20, 80, 3])
    label_reshape = tf.reshape(label, [FLAGS.label_num])
    # 进行批处理,每次读取的样本数,就是每次训练的样本数
    image_batch, label_batch = tf.train.batch([image_reshape, label_reshape], batch_size=FLAGS.batch_size,num_threads=1, capacity=FLAGS.batch_size)
    return image_batch, label_batch

def fc_model(image):
    """
    进行预测结果
    :param image:特征值
    :return:y_predict 【100,104】
    """
    with tf.variable_scope("model"):
        # 转化图片为二维
        image_reshape = tf.reshape(image, [-1, 20 * 80 * 3])
        # 1,随机初始化权重,偏值
        weight = weight_variables([20 * 80 * 3, FLAGS.label_num * FLAGS.letter_num])
        bias = bias_Variables([FLAGS.label_num * FLAGS.letter_num])
        # 2,进行全连接层计算 没有使用卷积神经网络 [100,4*26]
        y_predict = tf.matmul(tf.cast(image_reshape, tf.float32), weight) + bias
        return y_predict

def transform_to_onthot(label):
    """
    将读取文件的目标值转化为ont-hot编码
    :param label:【100,4】   【【1,2,3,4】,【5,6,7,8】.....】
    :return:[100,4,26]
    """
    label_onehot = tf.one_hot(label, depth=FLAGS.letter_num, on_value=1.0, asix=2)
    return label_onehot

def captcharec():
    """验证码识别程序"""
    # 1,读取验证码的数据文件
    image_batch, label_batch = read_and_decode()
    # 2,输入图片特征数据建立模型,得出预测结果
    # 一层全连接神经网络进行预测
    # matrix【100,20,80,3】---》转化为二维*【20*80*3,4*26】+【4*26】=【100,104】
    y_predict = fc_model(image_batch)
    # 3,转换目标值为ont-hot编码 [100,4,26]
    y_true = transform_to_onthot(label_batch)
    # 4,交叉熵损失计算
    with tf.variable_scope("sotf_cross"):
        # y_true[100,4,26] ---> [100,104]
        loss = tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits(
            labels=tf.reshape(y_true, [FLAGS.batch_size, FLAGS.label_num * FLAGS.letter_num]), logits=y_predict))
    # 5,优化损失
    with tf.variable_scope("opt"):
        train_op = tf.train.GradientDescentOptimizer(0.01).minimize(loss)
    # 6,准确率计算
    with tf.variables_scope("acc"):
        # 比较目标值与与与测试 4个位置是否全部相同, 三维比较  需要将预测值转换为三维
        equal_list = tf.equal(tf.argmax(y_true, 2),
                              tf.argmax(tf.reshape(y_predict, [FLAGS.batch_size, FLAGS.label_num, FLAGS.letter_num]),2))
        accuracy = tf.reduce_mean(tf.cast(equal_list.tf.float32))
    # 7,开启会话训练
    init_op = tf.golbal_variables_initilizer()
    with tf.Session() as sess:
        sess.run(init_op)

        # 定义线程协调器,开启线程
        coord = tf.train.Coordinator()
        # 开启线程取读取文件
        threads = tf.train.start_queue_runners(sess, coord=coord)
        # 训练
        for i in range(5000):
            sess.run(train_op)
            print("第%d次准确率是:%f" % (i, accuracy.eval()))
        # 回收
        coord.request_stop()
        coord.join(threads)

原文地址:https://www.cnblogs.com/Dean0731/p/11788568.html

时间: 2024-07-30 17:23:25

深度学习_1_神经网络_3_验证码识别的相关文章

深度学习_1_神经网络_1

神经网络 感知机 解决分类问题 http://playground.tensorflow.org 神经网络 定义: ? 在机器学习领域和认知科学领域,人工神经网络(artificial neural network) 简称ann或类神经网络,一种放生物 神经网络的结构和功能的计算模型,用于对函数进行估计或近似. 种类: ? 基础神经网络:单层感受器,线性神经网络,BP神经网络,Hopfield神经网络 ? 进阶神经网络:玻尔兹曼机,受限玻尔兹曼机,递归神经网络 ? 深度神经网络:深度置信网络,卷

Spark MLlib Deep Learning Convolution Neural Network (深度学习-卷积神经网络)3.3

3.Spark MLlib Deep Learning Convolution Neural Network(深度学习-卷积神经网络)3.3 http://blog.csdn.net/sunbow0 第三章Convolution Neural Network (卷积神经网络) 3实例 3.1 测试数据 按照上例数据,或者新建图片识别数据. 3.2 CNN实例 //2 测试数据 Logger.getRootLogger.setLevel(Level.WARN) valdata_path="/use

深度学习——人工神经网络再掀研究热潮

深度学习——人工神经网络再掀研究热潮 胡晓林 人工神经网络起源于上世纪40年代,到今天已经70年历史了.就像人的一生,经历了起起落落,有过辉煌,有过黯淡,有过嘈杂,有过冷清.总体说来,过去的20年中人工神经网络的研究不温不火,直到最近三五年,随着深度学习概念的提出,人工神经网络才又重新焕发生机,甚至再度掀起研究热潮.本文简述一下人工神经网络的“前世今生”,并简单展望一下它的未来. 第一个神经元模型是1943年McCulloch和Pitts提出的,称为threshold logic,它可以实现一些

《卷积神经网络的Python实现》PDF代码+《解析深度学习卷积神经网络原理与视觉实践》PDF分析

CNN正在革新几个应用领域,如视觉识别系统.自动驾驶汽车.医学发现.创新电子商务等.需要在专业项目或个人方案中利用复杂的图像和视频数据集来实现先进.有效和高效的CNN模型. 深度卷积网络DCNN是目前十分流行的深度神经网络架构,它的构造清晰直观,效果引人入胜,在图像.视频.语音.语言领域都有广泛应用. 深度学习,特别是深度卷积神经网络是人工智能的重要分支领域,卷积神经网络技术也被广泛应用于各种现实场景,在许多问题上都取得了超越人类智能的结果. <卷积神经网络的Python实现>作为深度学习领域

Spark MLlib Deep Learning Convolution Neural Network (深度学习-卷积神经网络)3.1

3.Spark MLlib Deep Learning Convolution Neural Network (深度学习-卷积神经网络)3.1 http://blog.csdn.net/sunbow0 Spark MLlib Deep Learning工具箱,是根据现有深度学习教程<UFLDL教程>中的算法,在SparkMLlib中的实现.具体Spark MLlib Deep Learning(深度学习)目录结构: 第一章Neural Net(NN) 1.源码 2.源码解析 3.实例 第二章D

Spark MLlib Deep Learning Convolution Neural Network (深度学习-卷积神经网络)3.2

3.Spark MLlib Deep Learning Convolution Neural Network(深度学习-卷积神经网络)3.2 http://blog.csdn.net/sunbow0 第三章Convolution Neural Network (卷积神经网络) 2基础及源码解析 2.1 Convolution Neural Network卷积神经网络基础知识 1)基础知识: 自行google,百度,基础方面的非常多,随便看看就可以,只是很多没有把细节说得清楚和明白: 能把细节说清

深度学习之神经网络与支持向量机

深度学习之神经网络与支持向量机 引言:神经网络(Neural Network)与支持向量机(Support Vector Machines,SVM)是统计学习的代表方法.可以认为神经网络与支持向量机都源自于感知机(Perceptron).感知机是1958年由Rosenblatt发明的线性分类模型.感知机对线性分类有效,但现实中的分类问题通常是非线性的. 神经网络与支持向量机(包含核方法)都是非线性分类模型.1986年,Rummelhart与McClelland发明了神经网络的学习算法Back P

深度学习卷积神经网络大事件一览

深度学习(DeepLearning)尤其是卷积神经网络(CNN)作为近几年来模式识别中的研究重点,受到人们越来越多的关注,相关的参考文献也是层出不穷,连续几年都占据了CVPR的半壁江山,但是万变不离其宗,那些在深度学习发展过程中起到至关重要的推动作用的经典文献依然值得回味,这里依据时间线索,对CNN发展过程中出现的一些经典文献稍作总结,方便大家在研究CNN时追本溯源,在汲取最新成果的同时不忘经典. 首先这里给出CNN在发展过程中的一些具有里程碑意义的事件和文献: 对于CNN最早可以追溯到1986

深度学习及神经网络学习总结

ps:我是在高一的时候第一次脑海中接触神经网络这个概念......,注意只是接触,一直扔到现在 1. 简介 神经网络和深度学习是由Michael Nielsen所写,其特色是:兼顾理论和实战,是一本供初学者深入理解Deep Learning的好书. 2. 感知器与sigmoid神经元 2.1 感知器(Perceptrons) 感知器工作原理:接收一系列二进制输入,经过特定的规则计算之后,输出一个简单的二进制. 计算规则:通过引入权重(weights)表示每个输入对于输出的重要性,则有 记w?x=