Keras进行人民币面额识别(二)
TinyMind人民币面值&冠字号编码识别挑战赛
- 数据准备
- 环境的准备
- 完整代码
- 代码解析
- 输出结果
本篇是进行神经网络的训练
数据准备
上一篇文章进行了数据的分类,获得的数据如下:
环境的准备
进行神经网络训练,需要的环境还是比较多的,建议下载Anaconda
网上有很多环境配置
推荐一种,步骤比较多,不是一键式安装,中间肯定会出现各种奇奇怪怪的问题,有问题找百度
https://blog.csdn.net/qq_32728345/article/details/81570504
完整代码
里边有大量的注释,就算看不懂也应该会改
from keras import layers
from keras import models
#设置文件目录#训练集
trainDir ='H:/face_value_check/train_data/'#验证集
valDir = 'H:/face_value_check/val_data/'#创建模型
model = models.Sequential()
model.add(layers.Conv2D(32, (3, 3), activation='relu',input_shape=(150, 150, 3)))
#卷积层,输出空间的维数为32,也可以说是输出特征图的深度为32,提取信息的窗口大小(3,3),卷积核的大小也为(3,3)
#激活函数relu,输入图片大小(150,150,3)
model.add(layers.MaxPooling2D((2, 2)))
#池化层,窗口大小为(2,2),缩小特征图的尺寸
model.add(layers.Conv2D(64, (3, 3), activation='relu'))
model.add(layers.MaxPooling2D((2, 2)))
model.add(layers.Conv2D(128, (3, 3), activation='relu'))
model.add(layers.MaxPooling2D((2, 2)))
model.add(layers.Conv2D(128, (3, 3), activation='relu'))
model.add(layers.MaxPooling2D((2, 2)))
model.add(layers.Flatten())
#扁平层,将多维的输入转化为一维的输出
model.add(layers.Dropout(rate=0.5))
#这个层是可以删掉的,主要用来防止过拟合,放着也没事
model.add(layers.Dense(512, activation='relu'))
#全连接层,将提取的特征组合,得出结果
model.add(layers.Dense(9, activation='softmax'))
#因为要得出九个结果所以最后要输出九个数#设置损失函数,优化器,模型在训练和测试时的性能指标
from keras import optimizersmodel.compile(loss='categorical_crossentropy',#因为是多标签分类,所以使用categorical_crossentropyoptimizer=optimizers.RMSprop(lr=1e-4),#这里可以设置学习率metrics=['acc'])#配置图片生成器
from keras.preprocessing.image import ImageDataGenerator
#将图片像素缩小为[0,1]之间的浮点数#本次人民币面值特征比较明显,而且会摆的整整齐齐的让你识别,数据也比较多,所以不用数据增强
train_datagen = ImageDataGenerator(rescale=1./255)# rotation_range=40,#图像随机旋转的最大角度# width_shift_range=0.2,#图片在水平位置上偏移的最大百分比值# height_shift_range=0.2,#数值位置上# shear_range=0.2,#随机错位切换的角度# zoom_range=0.2,#图片随机缩放的范围# horizontal_flip=True)#随机将一半的图片进行水平翻转#验证集的数据不能增强
val_datagen = ImageDataGenerator(rescale=1./255)#创建图片生成器
train_generator = train_datagen.flow_from_directory(trainDir,#图片地址target_size=(150, 150),#将图片调整为(150,150)大小batch_size=20,#设置批量数据的大小为20class_mode='categorical')#设置返回标签的类型
val_generator = val_datagen.flow_from_directory(valDir,target_size=(150, 150),batch_size=20,class_mode='categorical')#拟合模型
history = model.fit_generator(train_generator,steps_per_epoch=100,#迭代进入下一轮次需要抽取的批次epochs=30,#数据迭代的轮数validation_data=val_generator,validation_steps=50)#验证集用于评估的批次#保存模型
model.save('face_value.h5')#画出结果
import matplotlib.pyplot as plt#history.history中就只有这四个值,分别是准确度,验证集准确度,损失,验证集损失
acc = history.history['acc']
val_acc = history.history['val_acc']
loss = history.history['loss']
val_loss = history.history['val_loss']
epochs = range(1, len(acc) + 1)#画两个图,分别是正确率和损失
#正确率
plt.figure(1)
plt.plot(epochs, acc, 'bo', label='Training acc')
plt.plot(epochs, val_acc, 'b', label='Validation acc')
plt.title('Training and validation accuracy')
plt.legend()
plt.savefig('acc1.png')
plt.show()
#验证损失
plt.figure(2)
plt.plot(epochs, loss, 'bo', label='Training loss')
plt.plot(epochs, val_loss, 'b', label='Validation loss')
plt.title('Training and validation loss')
plt.legend()
plt.savefig('loss1.png')
plt.show()
代码解析
代码不难,只是比较多而已,模型是常用的卷积神经网络模型,内容主要如下:
输出结果
正确率:
损失:
在我看来,这个结果还是不错的,正确率已经非常接近100%了,我很满意,就没有再训练了,如果再次提高正确率,就把学习率弄小点,然后训练批次弄多点
Keras进行人民币面额识别(二)相关推荐
- Keras进行人民币面额识别(三)
TinyMind人民币面值&冠字号编码识别挑战赛 比赛链接 输入信息 需要输出的信息 代码源码 代码解释 输出结果转化为相应面值 打印进度 输出结果 本篇是对测试集进行测试和相应结果的输出 比 ...
- MATLAB人民币面额识别
自动缴费机.存取款一体机和自动售货机出现在了我们的生活中.这些先进的设备中最重要的一门技术就是:纸币识别技术.当我们将钞票投入缴费机或者存款机时,机器必定会首先识别用户投入的是面额为多少的纸币,之后再 ...
- Keras实战——人脸表情识别(二)提取人脸并识别表情
完整代码已上传 CSDN下载:https://download.csdn.net/download/pmj110119/11293264 百度云:https://pan.baidu.com/s/16Z ...
- 基于MATLAB的人民币面额的自动识别
一.课题介绍 本文通过分析第五版人民币自身特征,分别利用主色调提取.长宽比提取.中值滤波特征图像提取.特征数字提取等四种方法,通过 matlab 软件来实现对第五套人民币 100 元.50 元.和 2 ...
- 深度学习--TensorFlow(项目)Keras手写数字识别
目录 效果展示 基础理论 1.softmax激活函数 2.神经网络 3.隐藏层及神经元最佳数量 一.数据准备 1.载入数据集 2.数据处理 2-1.归一化 2-2.独热编码 二.神经网络拟合 1.搭建 ...
- keras+yolo实现旗帜识别
向AI转型的程序员都关注了这个号???????????? 机器学习AI算法工程 公众号:datayx 本项目里有40类旗帜 旗帜(包含40个种类旗帜),数据来着于网络,数据标注是个苦力活,本数据包 ...
- 【人民币识别】人民币序列号识别【含GUI Matlab源码 908期】
⛄一.简介 本文描述的人民币序列号识别系统实现了从图像预处理到识别结果的过程, 而序列号识别是本文的重要内容.以序列号区域为研究对象, 主要包括图像预处理.图像分割以及序列号识别等过程. 1 图像预处 ...
- IOS手机全屏长按识别二维码HTML代码
代码段作用讲解: 1. 二维码的全屏样式, opacity: 0; 透明样式, touch-callout: none; -webkit-touch-callout: none; -ms-touch- ...
- IOS长按识别二维码失败
IOS长按不识别二维码,出现放大图片的问题解决. CSS加入样式: touch-callout: none; -webkit-touch-callout: none; -ms-touch-callou ...
最新文章
- ThreadLocal 和 InheritableThreadLocal
- 密码必须至少为6个字符_【每日一题】| 常见的编码方式之栅栏密码
- 如何基于Spark进行用户画像?
- flutter的按钮如何变为不可选中_Flutter 61: 图解基本 Button 按钮小结 (一)
- 今天吃什么网站源码火遍朋友圈
- Vue2.0 的漫长学习ing-1-5
- Qt 学习之路 2 --- 读书笔记
- 计算机桌面是快捷方式,我的电脑桌面上的图标都变成快捷方式了怎么处理?
- 日本官方版灌篮高手结局
- android谷歌卫星地图,高德地图安卓端实现卫星地图路网功能
- DateTime.ToString()的用法
- Mac To Win
- adb 连接安卓手机远程调试
- 狂神说smbms超市管理系统项目源码
- 左倾红黑树(LLRBT)删除操作及相关性质总结答疑
- 原生JS鼠标移动拖尾效果
- android 来电压力测试,50次之后,来电无法唤醒屏幕
- iOS 版本分布统计
- vijos1579——宿命的PSS
- 创建一个考试管理系统
热门文章
- 精品内容永不过时,个人站长应自我审视
- 三星手机查询生产日期
- 一篇文章带你了解Python中的游戏开发模块pyglet
- 实验4-2-6 输出三角形字符阵列 (15分)本题要求编写程序,输出n行由大写字母A开始构成的三角形字符阵列。
- 2020年程序员技能展望:平均年薪5.4万美元,JavaScript与Python最受欢迎
- 屡教不改!这四大运营商仍在出卖用户位置数据...
- idea中Toggle Offline Mode是什么意思
- Linux中的lo回环接口
- 自己实现的php加密解密函数结果纯字母和数字
- Ecovadis审核之【4大模块 7项原则 21项标准议题】