在之前tensorflow手写数字识别已经完成了普通神经网络实现、加入多隐藏层的神经网络以及tensorboard可视化神经网络,当时识别的准确率依然停留在96%,商用化准确率至少在99.9%,同时还应考虑模型的运行时间情况。
本次实现tensorflow手写数字识别将引入CNN卷积神经网络,大幅度提高模型的准确率,CNN卷积神经网络广泛应用于计算机可视化领域,同时现阶段还在与RNN循环神经网络进行混合,进一步提高图片会话能力,最为经典的就是图片描述模型。
本模型使用卷积神经网络跑Minist数据集,首先,在学习本模型之前,你需要非常详细的学习一下CNN卷积神经网络,这里我会贴上非常通俗易懂的解释。
我们还是将代码进行分区
- 加载MNIST数据,导入所需模块,定义占位符
- 自定义函数部分(主要是为了美观)
- 卷积核构建部分(神经网络的构建)
- 循环训练部分
第一 加载MNIST数据,导入所需模块,定义占位符
# -*- coding: utf-8 -*-
import tensorflow as tf
# 加载测试数据的读写工具包,加载测试手写数据,目录MNIST_data是用来存放下载网络上的训练和测试数据的。
# 这里,参考我前面的博文,由于网络原因,测试数据,我单独下载后,放在当前目录的MNIST_data目录了。
import tensorflow.examples.tutorials.mnist.input_data as input_data
mnist = input_data.read_data_sets("MNIST_data", one_hot=True)
# 创建一个交互式的Session。
sess = tf.InteractiveSession()
# 创建两个占位符,数据类型是float。x占位符的形状是[None,784],即用来存放图像数据的变量,图像有多少张
# 是不关注的。但是图像的数据维度有784围。怎么来的,因为MNIST处理的图片都是28*28的大小,将一个二维图像
# 展平后,放入一个长度为784的数组中。
# y_占位符的形状类似x,只是维度只有10,因为输出结果是0-9的