对于身份证问题,我们在上一篇成功地设计出了合适的模型并用代码实现,但是在模型训练过程中,我们发现训练时间很长,误差减少很慢。针对训练时间长和误差减少很慢,我们通常行之有效的方法主要有3种:

  1. 增加隐藏层的神经元节点数量
  2. 增加隐藏层的层数
  3. 适当调节学习率

增加隐藏层的神经元节点数量

  我们可以把隐藏层1的节点数增加到32个,只需要把w1定义成形状为[4,32]的变量,同时把w2定义为形态为[32,2]的变量,具体代码如下:

# Author:北京
# QQ:838262020
# time:2021/4/21
import tensorflow as tf
import randomrandom.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)
w1 = tf.Variable(tf.random_normal([4, 32], 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)
w2 = tf.Variable(tf.random_normal([32, 2], mean=0.5, stddev=0.1), dtype=tf.float32)
b2 = tf.Variable(0, dtype=tf.float32)n2 = tf.matmul(n1, w2) + b2y = 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)))

增加隐藏层的层数

  一般来说,增加隐藏层的层数比增加某个隐藏层中的神经节点的数量效果会好一点,但是每一层上的激活函数的选择需要动一些脑筋。具体代码如下:

# Author:北京
# QQ:838262020
# time:2021/4/21
import tensorflow as tf
import randomrandom.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)
w1 = tf.Variable(tf.random_normal([4, 32], 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)
w2 = tf.Variable(tf.random_normal([32, 2], mean=0.5, stddev=0.1), dtype=tf.float32)
b2 = tf.Variable(0, dtype=tf.float32)n2 = tf.matmul(n1, w2) + b2w3 = tf.Variable(tf.random_normal([16, 2], mean=0.5, stddev=0.1), dtype=tf.float32)
b3 = tf.Variable(0, dtype=tf.float32)n3 = tf.matmul(n2, w3) + b3y = tf.nn.softmax(tf.reshape(n3, [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)))

适当调节学习率

  有时候学习率设置不合适也会导致训练模型效率不高,可以适当修改学习率的数值。

身份证男女识别---进一步优化03相关推荐

  1. 身份证男女识别---非线性问题01

    身份证问题的引入 我们都知道身份证由18位数字组成,倒数第2位数字代表男女性别,如果是奇数,表明持有身份证的人事男性:如果是偶数,则表明为女性.假如事先不知道这个规则,但是收集了一大堆身份证,在收集过 ...

  2. 身份证上男女识别--非线性问题02

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

  3. iOS身份证号码识别

    最近不少简友说git上下载下来的代码报各种问题,因为包含的库都比较大,所以大家在pod的时候耐心等待,另外我已经将代码适配到了iOS10. 一.前言   身份证识别,又称OCR技术.OCR技术是光学字 ...

  4. c#和java部署pytorch同事识别两个图片_身份证OCR识别移动端amp;服务器

    摘要:由Web Service和其相关网站接收客户端上传的需要识别的图片.当Web Service接收到图片后将其转发给调度服务器,由任务调度程序再把识别请求分发给空闲的识别服务器,终由Web Ser ...

  5. 原创:谈谈计算机图像识别技术之身份证号码识别

    原创:谈谈计算机图像识别技术之身份证号码识别 作者:刘常军(2014-1-21)   前两天看到一篇文章,说支付宝钱包的iOS版和Android版已经升至8.0,只要通过摄像头对准银行卡进行扫描,支付 ...

  6. c#和java部署pytorch同事识别两个图片_身份证OCR识别移动端服务器

    摘要:由Web Service和其相关网站接收客户端上传的需要识别的图片.当Web Service接收到图片后将其转发给调度服务器,由任务调度程序再把识别请求分发给空闲的识别服务器,终由Web Ser ...

  7. 谈谈计算机图像识别技术之身份证号码识别

    转载自 http://www.cnblogs.com/liu7537/p/3528968.html 作者:刘常军(2014-1-21)   前两天看到一篇文章,说支付宝钱包的iOS版和Android版 ...

  8. Java 身份证号码识别系统

    最近发现一个有趣的项目. 这个项目是通过学习https://gitee.com/nbsl/idCardCv 后整合 tess4j,不需要经过训练直接使用的,当然,你也可以进行训练后进行使用. 该项目修 ...

  9. 身份证批量识别 免费 身份证OCR识别 如何用python实现身份证识别

    身份证批量识别 身份证OCR 使用的是腾讯的识别引擎 使用的python已经过封装 csdn https://download.csdn.net/download/qq_24250441/193604 ...

最新文章

  1. C++ boost 实例学习
  2. 像玩乐高一样,学会如何定义产品的商业模式
  3. 使用Servlet上传多张图片——Service层(ProductInfoService.java和ProductInfoServiceImpl)
  4. [转]Java5泛型的用法,T.class的获取和为擦拭法站台
  5. xshell利用linux rz sz 命令上传、下载文件
  6. Utrack声卡和机架包的调试
  7. java 游戏编程 (一)
  8. 文言文编程可以编译成PHP吗,PSTK项目:文言文也能编程?大四学生发明文言文编程语言...
  9. BlackBerry 黑莓 7230 7290 快捷键
  10. 内部系统界面设计【下】 | 设计技巧
  11. 重电计算机学院李明建,【i小T有话说 | 第8期】风里雨里,我在上电计算机学院等你!...
  12. jsd2205-csmall-passport(Day13)
  13. [WARNING]: Platform linux on host is using the discovered Python interpreter at /usr/bin/python, but
  14. 领域驱动设计,为何又死灰复燃了?
  15. 数据团队总监生存指南
  16. 小程序+云开发---基础篇
  17. 软件测试实用技术与常用模板:前言
  18. IntelliJ IDEA旗舰版 下载安装
  19. 七夕到了,程序员怎么过七夕
  20. 机器学习基础知识总结

热门文章

  1. 使用deepin 20作为开发环境
  2. matlab产生一个稀疏向量,Matlab中的稀疏矩阵向量乘法比Python快吗?
  3. 【youcans 的 OpenCV 例程200篇】153. 边缘检测之 DoG 算子
  4. unity3D 涂涂乐使用shader实现上色效果
  5. unity3D AR涂涂乐制作浅谈
  6. 使用神器vscode代替beyond compare进行文本比较高亮显示
  7. Android 4.4 KitKat 支持 u 盘功能
  8. 调用钉钉API发送消息通知给个人或部门 ,钉钉后台
  9. 云计算面试题及答案,云计算工程师面试题集锦
  10. LXR( Linux超文本交叉代码检索工具)