百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 编程字典 > 正文

深度学习——身份证上男女识别之非线性问题02

toyiye 2024-06-21 12:38 10 浏览 0 评论

背景

我们在深度学习——身份证男女识别的问题引入1中采用单层网络的模型进行了身份证男女识别,在经过多次训练发现平均误差在0.46左右,误差比较大,说明单层网络模型无法解决这个问题。我们也提出了神经网络的优化方法-,主要是全连接神经网络。

多层全连接神经网络

矩阵乘法

??设矩阵A,B,其中矩阵A是2X3,矩阵B是3X4,将矩阵A和矩阵B叉乘,即将A矩阵的每一行和B矩阵的每一列相乘,得到矩阵C(2X4)。我们在Python进行验证:

import numpy as np
a =[[1,2,3],[4,5,6]]
b =[[1,2,3,4],[5,6,7,8],[9,0,1,2]]
c=np.matmul(a,b)
print(c)

??运行结果:

[[38 14 20 26]
 [83 38 53 68]]

矩阵乘法在全连接层应用

??我们采用前面的三好学生问题来使用矩阵乘法实现全连接关系,如图1.1所示。

????????矩阵乘法表示全连接层展示图

使用均方误差作为计算误差的方法

??我们之前就是误差loss的时候,使用的都是:

loss=tf.abs(y-yTrain)

??这种形式来计算误差更加适合数值范围较大的情况,例如天气的温度、证劵的价格以及三好学生的总成绩问题。
??均方误差是神经网络中国的一种误差计算方法,是指结果值向量中各数据项偏离目标值的距离平方和的平均数,也就是误差平方和的平均数。如果对于三好学生评选结果问题使用均方误差的方法,需要先把每个计算结果转换成一个二维向量,例如原来结果是1,需要变成[1,0];
??如果原来结果是0,需要变成[0,1];如果结果是0,2,则需要变成[0.2,0.8],其中第一个数字代表“是三好学生的概率”,第二个数字代表“不是三好学生的概率”,那么如果计算结果是[0.2,0.8],目标值是[1,0],那么均方误差是:

??对于二分类问题,均方误差其实一般会把误差缩小,但是误差在[0,1]范围之内。我们通过下面代码进行验证:

# Author:北京
# QQ:838262020
# time:2021/4/21
import tensorflow as tf

y = tf.placeholder(dtype=tf.float32)
yTrain = tf.placeholder(dtype=tf.float32)

loss = tf.reduce_mean(tf.square(y - yTrain))

sess = tf.Session()

print(sess.run(loss, feed_dict={y: [0.2, 0.8], yTrain: [1, 0]}))
print(sess.run(loss, feed_dict={y: [0.2, 0.8], yTrain: [0, 1]}))
print(sess.run(loss, feed_dict={y: [1.0, 0.0], yTrain: [0, 1]}))
print(sess.run(loss, feed_dict={y: [1.0, 0.0], yTrain: [1, 0]}))

??其中tf.squre函数是求平方值的函数,tf.reduce_mean函数可以对一个矩阵(或向量)中的所有数求得一个平方数。
??运行结果:

0.64
0.04
1.0
0.0

激活函数tanh

??我们前面使用够sigmoid函数的作用把任意一个数字收敛到[0,1]的范围之内,从而把一组线性数据转化为非线性数据。而tanh函数和sigmoid函数类似,将线性数据转化为非线性数据,与sigmoid函数的区别在于tanh函数将任意一个数字转换为[-1,1]之间。

新的模型

身份证问题的模型改成多层全连接神经网络模型,如图所示

具体代码实现:

# Author:北京
# QQ:838262020
# time:2021/4/21
import tensorflow as tf
import random
random.seed()

x=tf.placeholder(tf.float32)
yTrain=tf.placeholder(tf.float32)

w1=tf.Variable(tf.random_normal([4,8],mean=0.5,stddev=0.1),dtype=tf.float32)
b1=tf.Variable(0,dtype=tf.float32)
xr=tf.reshape(x,[1,4])
n1=tf.nn.tanh(tf.matmul(xr,w1)+b1)

w2=tf.Variable(tf.random_normal([8,2],mean=0.5,stddev=0.1),dtype=tf.float32)
b2=tf.Variable(0,dtype=tf.float32)

n2=tf.matmul(n1,w2)+b2

y=tf.nn.softmax(tf.reshape(n2,[2]))

loss =tf.reduce_mean(tf.square(y-yTrain))

optimizer=tf.train.RMSPropOptimizer(0.01)
train=optimizer.minimize(loss)
sess=tf.Session()
sess.run(tf.global_variables_initializer())

lossSum=0.0
for i in range(50000):
    # 随机产生[0,9]的4位整数,模拟身份证后4位
    xDataRandom = [int(random.random() * 10), int(random.random() * 10), int(random.random() * 10),
                   int(random.random() * 10)]
    # 判断倒数第2位数字奇数或者偶数来模型对应的性别男女
    if xDataRandom[2] % 2 == 0:
        yTrainDataRandom = [0,1]
    else:
        yTrainDataRandom = [1,0]

    result = sess.run([train, x, yTrain, y, loss], feed_dict={x: xDataRandom, yTrain: yTrainDataRandom})
    lossSum = lossSum + float(result[len(result) - 1])
    print("i:%d,loss:%10.10f,avgLoss:%10.10f" % (i, float(result[len(result) - 1]), lossSum / (i + 1)))

运行结果:

i:49991,loss:0.0007885849,avgLoss:0.2097267489
i:49992,loss:0.6985108852,avgLoss:0.2097365259
i:49993,loss:0.0428997725,avgLoss:0.2097331888
i:49994,loss:0.0306137353,avgLoss:0.2097296061
i:49995,loss:0.0014930198,avgLoss:0.2097254410
i:49996,loss:0.0274514221,avgLoss:0.2097217953
i:49997,loss:0.0245045219,avgLoss:0.2097180908
i:49998,loss:0.6867797375,avgLoss:0.2097276322
i:49999,loss:0.0480841063,avgLoss:0.2097243994

相关推荐

为何越来越多的编程语言使用JSON(为什么编程)

JSON是JavascriptObjectNotation的缩写,意思是Javascript对象表示法,是一种易于人类阅读和对编程友好的文本数据传递方法,是JavaScript语言规范定义的一个子...

何时在数据库中使用 JSON(数据库用json格式存储)

在本文中,您将了解何时应考虑将JSON数据类型添加到表中以及何时应避免使用它们。每天?分享?最新?软件?开发?,Devops,敏捷?,测试?以及?项目?管理?最新?,最热门?的?文章?,每天?花?...

MySQL 从零开始:05 数据类型(mysql数据类型有哪些,并举例)

前面的讲解中已经接触到了表的创建,表的创建是对字段的声明,比如:上述语句声明了字段的名称、类型、所占空间、默认值和是否可以为空等信息。其中的int、varchar、char和decimal都...

JSON对象花样进阶(json格式对象)

一、引言在现代Web开发中,JSON(JavaScriptObjectNotation)已经成为数据交换的标准格式。无论是从前端向后端发送数据,还是从后端接收数据,JSON都是不可或缺的一部分。...

深入理解 JSON 和 Form-data(json和formdata提交区别)

在讨论现代网络开发与API设计的语境下,理解客户端和服务器间如何有效且可靠地交换数据变得尤为关键。这里,特别值得关注的是两种主流数据格式:...

JSON 语法(json 语法 priority)

JSON语法是JavaScript语法的子集。JSON语法规则JSON语法是JavaScript对象表示法语法的子集。数据在名称/值对中数据由逗号分隔花括号保存对象方括号保存数组JS...

JSON语法详解(json的语法规则)

JSON语法规则JSON语法是JavaScript对象表示法语法的子集。数据在名称/值对中数据由逗号分隔大括号保存对象中括号保存数组注意:json的key是字符串,且必须是双引号,不能是单引号...

MySQL JSON数据类型操作(mysql的json)

概述mysql自5.7.8版本开始,就支持了json结构的数据存储和查询,这表明了mysql也在不断的学习和增加nosql数据库的有点。但mysql毕竟是关系型数据库,在处理json这种非结构化的数据...

JSON的数据模式(json数据格式示例)

像XML模式一样,JSON数据格式也有Schema,这是一个基于JSON格式的规范。JSON模式也以JSON格式编写。它用于验证JSON数据。JSON模式示例以下代码显示了基本的JSON模式。{"...

前端学习——JSON格式详解(后端json格式)

JSON(JavaScriptObjectNotation)是一种轻量级的数据交换格式。易于人阅读和编写。同时也易于机器解析和生成。它基于JavaScriptProgrammingLa...

什么是 JSON:详解 JSON 及其优势(什么叫json)

现在程序员还有谁不知道JSON吗?无论对于前端还是后端,JSON都是一种常见的数据格式。那么JSON到底是什么呢?JSON的定义...

PostgreSQL JSON 类型:处理结构化数据

PostgreSQL提供JSON类型,以存储结构化数据。JSON是一种开放的数据格式,可用于存储各种类型的值。什么是JSON类型?JSON类型表示JSON(JavaScriptO...

JavaScript:JSON、三种包装类(javascript 包)

JOSN:我们希望可以将一个对象在不同的语言中进行传递,以达到通信的目的,最佳方式就是将一个对象转换为字符串的形式JSON(JavaScriptObjectNotation)-JS的对象表示法...

Python数据分析 只要1分钟 教你玩转JSON 全程干货

Json简介:Json,全名JavaScriptObjectNotation,JSON(JavaScriptObjectNotation(记号、标记))是一种轻量级的数据交换格式。它基于J...

比较一下JSON与XML两种数据格式?(json和xml哪个好)

JSON(JavaScriptObjectNotation)和XML(eXtensibleMarkupLanguage)是在日常开发中比较常用的两种数据格式,它们主要的作用就是用来进行数据的传...

取消回复欢迎 发表评论:

请填写验证码