上一篇博客中,我们已经训练好了模型

https://blog.csdn.net/Polaris47/article/details/80718328

接下来我们要加载模型并识别真实场景下的一个手写体数字

在此之前,我们先要准备好一张28*28像素的图像(可用ps制作),然后通过处理将像素的强度值变为0-1之间,之后即可输入模型进行识别。

保存已训练的模型文件如下:

代码如下:

import tensorflow as tf
import matplotlib.pyplot as plt
from PIL import Imagedef imageprepare(imagepath):im = Image.open(imagepath) #读取的图片所在路径,注意是28*28像素plt.imshow(im)  #显示需要识别的图片plt.show()im = im.convert('L')tv = list(im.getdata())tva = [(255-x)*1.0/255.0 for x in tv]return tvadef weight_variable(shape, name):initial = tf.truncated_normal(shape, stddev=0.1)  # 生成一个截断的正态分布return tf.Variable(initial, name=name)# 初始化偏置
def bias_variable(shape, name):initial = tf.constant(0.1, shape=shape)return tf.Variable(initial, name=name)# 卷积层
def conv2d(x, W):# x input tensor of shape `[batch, in_height, in_width, in_channels]`# W filter / kernel tensor of shape [filter_height, filter_width, in_channels, out_channels]# `strides[0] = strides[3] = 1`. strides[1]代表x方向的步长,strides[2]代表y方向的步长# padding: A `string` from: `"SAME", "VALID"`return tf.nn.conv2d(x, W, strides=[1, 1, 1, 1], padding='SAME')# 池化层
def max_pool_2x2(x):# ksize [1,x,y,1]return tf.nn.max_pool(x, ksize=[1, 2, 2, 1], strides=[1, 2, 2, 1], padding='SAME')# 命名空间
with tf.name_scope('input'):# 定义两个placeholderx = tf.placeholder(tf.float32, [None, 784], name='x-input')y = tf.placeholder(tf.float32, [None, 10], name='y-input')with tf.name_scope('x_image'):# 改变x的格式转为4D的向量[batch, in_height, in_width, in_channels]`x_image = tf.reshape(x, [-1, 28, 28, 1], name='x_image')with tf.name_scope('Conv1'):# 初始化第一个卷积层的权值和偏置with tf.name_scope('W_conv1'):W_conv1 = weight_variable([5, 5, 1, 32], name='W_conv1')  # 5*5的采样窗口,32个卷积核从1个平面抽取特征with tf.name_scope('b_conv1'):b_conv1 = bias_variable([32], name='b_conv1')  # 每一个卷积核一个偏置值# 把x_image和权值向量进行卷积,再加上偏置值,然后应用于relu激活函数with tf.name_scope('conv2d_1'):conv2d_1 = conv2d(x_image, W_conv1) + b_conv1with tf.name_scope('relu'):h_conv1 = tf.nn.relu(conv2d_1)with tf.name_scope('h_pool1'):h_pool1 = max_pool_2x2(h_conv1)  # 进行max-poolingwith tf.name_scope('Conv2'):# 初始化第二个卷积层的权值和偏置with tf.name_scope('W_conv2'):W_conv2 = weight_variable([5, 5, 32, 64], name='W_conv2')  # 5*5的采样窗口,64个卷积核从32个平面抽取特征with tf.name_scope('b_conv2'):b_conv2 = bias_variable([64], name='b_conv2')  # 每一个卷积核一个偏置值# 把h_pool1和权值向量进行卷积,再加上偏置值,然后应用于relu激活函数with tf.name_scope('conv2d_2'):conv2d_2 = conv2d(h_pool1, W_conv2) + b_conv2with tf.name_scope('relu'):h_conv2 = tf.nn.relu(conv2d_2)with tf.name_scope('h_pool2'):h_pool2 = max_pool_2x2(h_conv2)  # 进行max-pooling# 28*28的图片第一次卷积后还是28*28,第一次池化后变为14*14
# 第二次卷积后为14*14,第二次池化后变为了7*7
# 进过上面操作后得到64张7*7的平面with tf.name_scope('fc1'):# 初始化第一个全连接层的权值with tf.name_scope('W_fc1'):W_fc1 = weight_variable([7 * 7 * 64, 1024], name='W_fc1')  # 上一场有7*7*64个神经元,全连接层有1024个神经元with tf.name_scope('b_fc1'):b_fc1 = bias_variable([1024], name='b_fc1')  # 1024个节点# 把池化层2的输出扁平化为1维with tf.name_scope('h_pool2_flat'):h_pool2_flat = tf.reshape(h_pool2, [-1, 7 * 7 * 64], name='h_pool2_flat')# 求第一个全连接层的输出with tf.name_scope('wx_plus_b1'):wx_plus_b1 = tf.matmul(h_pool2_flat, W_fc1) + b_fc1with tf.name_scope('relu'):h_fc1 = tf.nn.relu(wx_plus_b1)# keep_prob用来表示神经元的输出概率with tf.name_scope('keep_prob'):keep_prob = tf.placeholder(tf.float32, name='keep_prob')with tf.name_scope('h_fc1_drop'):h_fc1_drop = tf.nn.dropout(h_fc1, keep_prob, name='h_fc1_drop')with tf.name_scope('fc2'):# 初始化第二个全连接层with tf.name_scope('W_fc2'):W_fc2 = weight_variable([1024, 10], name='W_fc2')with tf.name_scope('b_fc2'):b_fc2 = bias_variable([10], name='b_fc2')with tf.name_scope('wx_plus_b2'):wx_plus_b2 = tf.matmul(h_fc1_drop, W_fc2) + b_fc2with tf.name_scope('softmax'):# 计算输出prediction = tf.nn.softmax(wx_plus_b2)res = tf.argmax(prediction, 1)saver = tf.train.Saver()
image = imageprepare('6.png')with tf.Session() as sess:saver.restore(sess, "cnn_Model/model.ckpt")result = sess.run(res,feed_dict={x: [image],keep_prob:1.0})print('识别结果为:%d' %result)

制作的图像和识别结果如下:

Tensorflow - 加载卷积神经网络实现手写体数字识别相关推荐

  1. 基于AlexNet卷积神经网络的手写体数字识别系统研究-附Matlab代码

    ⭕⭕ 目 录 ⭕⭕ ✳️ 一.引言 ✳️ 二.手写体数字识别系统 ✳️ 2.1 MNIST 数据集 ✳️ 2.2 CNN ✳️ 2.3 网络训练 ✳️ 三.手写体数字识别结果 ✳️ 四.参考文献 ✳️ ...

  2. 基于TensorFlow卷积神经网络的手写体数字识别

    一.卷积神经网络(CNN) 二.LeNet 三.代码 1.Mnist手写体训练并测试 2.可视化 四.数据集分析 五.结果分析 1.准确率 2.可视化测试 一.卷积神经网络(CNN) 参考:https ...

  3. 基于AlexNet卷积神经网络的手写体数字倾斜校正系统研究-附Matlab代码

    ⭕⭕ 目 录 ⭕⭕ ✳️ 一.引言 ✳️ 二.AlexNet 网络 ✳️ 三.实验验证 ✳️ 3.1 实验数据集 ✳️ 3.2 数据训练 ✳️ 3.3 手写体倾斜数字校正结果 ✳️ 四.参考文献 ✳️ ...

  4. 特征匹配实现印刷体数字识别,卷积神经网络实现印刷体数字识别

    特征匹配实现印刷体数字识别,卷积神经网络实现印刷体数字识别(很可靠) 1.印刷体数字识别(特征匹配) 1.首先需要了解为什么印刷体数字识别我使用的是特征匹配的方法,我起初也走了很多的坑,当初固执的识别 ...

  5. 并行化实现基于BP神经网络的手写体数字识别

    并行化实现基于BP神经网络的手写体数字识别 手写体数字识别可以堪称是神经网络学习的"Hello World" ,我今天要说的是如何实现BP神经网络算法的并行化,我们仍然是以手写体数 ...

  6. matlab+BP神经网络实现手写体数字识别

    个人博客文章链接:http://www.huqj.top/article?id=168 接着上一篇所说的 BP神经网络,现在用它来实现一个手写体数字的识别程序,训练素材来自吴恩达机器学习课程,我把打包 ...

  7. 基于BP神经网络的手写体数字识别matlab仿真实现

    目录 一.理论基础 二.核心程序 三.测试结果 一.理论基础 文字.数字识别是一个典型的模式识别问题,也是模式识别中一个非常重要的应用领域.在文字.数字识别系统中,手写体的文字与识别是一个较难的领域, ...

  8. 利用python卷积神经网络手写数字识别_卷积神经网络使用Python的手写数字识别

    为了使机器更智能,开发人员正在研究机器学习和深度学习技术.人类通过反复练习和重复执行任务来学习执行任务,从而记住了如何执行任务.然后,他大脑中的神经元会自动触发,它们可以快速执行所学的任务.深度学习与 ...

  9. 卷积神经网络 手写数字识别(包含Pytorch实现代码)

    Hello!欢迎来到六个核桃Lu! 运用卷积神经网络 实现手写数字识别 1 算法分析及设计 卷积神经网络: 图1-2 如图1-2,卷积神经网络由若干个方块盒子构成,盒子从左到右仿佛越来越小,但却越来越 ...

最新文章

  1. 高校青椒为避免相亲重复,给没谈成的124个姑娘每人建了个文件夹...
  2. 2分钟在线做出一张普氏分析图(Procrustes Analysis)
  3. Java堆和栈的一些区别。。。
  4. OPENCV标定外参
  5. Seata RPC 模块的重构之路
  6. android Spinner点击事件处理
  7. QT的QSGMaterialShader类的使用
  8. java arraylist排序_一文读懂Java集合框架
  9. 用html页面制作开关,利用前端基础制作html开关图标
  10. java输出到txt,换行问题
  11. 【C++】 C++入门和基础
  12. 似然函数(likehood)和概率分布(probability)
  13. u盘引导linux加载raid卡驱动,解决方案:如何使用centos U盘加载Raid卡驱动程序_计算机基础知识_IT /计算机_资源...
  14. APP隐私合规检测工具Camille环境搭建
  15. 如何挑选机械键盘?高性价比的机械键盘推荐
  16. java.io.IOException: Cleartext HTTP traffic to xxx.xxx.xxx.xxx not permitted 的解决方案
  17. 博物馆沉浸式体验如何彰显文化价值
  18. 国内首部创业纪实电影《燃点》进校园:如何靠近成功的2%
  19. 动态规划C++实现--换钱的方法数(二)(动态规划及其改进方法)
  20. 做PPT别再傻乎乎的直接插入图片了,手把手教你处理毛玻璃式图片

热门文章

  1. 主成分分析法(PCA)
  2. 软件设计模式——装饰模式详解
  3. 为何Symbian 手机远比 iPhone4 靠谱
  4. php如何做手写字保存,如何将手写文字转换成电子版
  5. 【python】《多媒体技术与应用》实验报告「数字图像压缩」「傅里叶变换」
  6. 基于OpenCV+CUDA实时视频抠绿、背景合成以及抠绿算法小结
  7. 城市:天际线/Cities: Skylines 全DLC解锁
  8. ps+awk,批量清理进程
  9. vue高仿饿了么APP(二)
  10. vue使用pdf.js实现移动端在线PDF文件预览