基于tensorflow框架对MNIST数据集手写识别卷积神经网络的实现

这篇博客介绍了基于Tensorflow的卷积神经网络(类似LeNet)对MNIST数据集的手写数字识别。训练环境包括cuda 9.0, cudnn 7.05, GTX 960 GPU, Linux Ubuntu系统和Tensorflow-gpu。网络结构包含卷积层和全连接层,训练过程中采用MaxPooling和ReLU、Softmax激活函数。经过训练,模型在3000次迭代后达到98.16%的准确率。" 80938574,7815149,PCL初学者指南:从PCD文件加载点云数据,"['PCL学习', '3D点云处理', 'C++编程', '数据读取']
摘要由CSDN通过智能技术生成

0.MNIST数据集介绍:

MNIST数据集是由10000张28*28*1手写数字图片所构成的数据集,MNIST 数据集来自美国国家标准与技术研究所, National Institute of Standards and Technology (NIST). 训练集 (trainingset) 由来自 250 个不同人手写的数字构成, 其中 50% 是高中学生, 50% 来自人口普查局 (the Census Bureau) 的工作人员. 测试集(test set) 也是同样比例的手写数字数据.

下面是部分数据截图:

1.MNIST数据集目录结构:

 Train-images* 是训练数据

 Train-labels* 是训练数据的标签

 T10k-image* 是测试图片

 T10k-labels* 是测试图片的正确结果标签

2.本次训练采用的卷积神经网络结构:

 LeNet卷积网络结构:

本次试验训练模型使用Tensorboard可视化:

 

本次实验采用了类似于LeNet模型的卷积结构:

神经网络层次:

层次类别:

Size

第一层

MNIST数据层

28*28*1

第二层

Conv1(第一卷积层)

32*5*5

第三层

池化层1

Size:2*2, stride:2,2

第四层

Conv2(第二卷积层)

64*5*5

第五层

池化层2

Size:2*2 ,strie:2,2

第六层

全连接层1

Size:1024

第七层

第一激活层

Function: Relu

第八层

全连接层2

Size: 10

第九层

第二激活层

Function:Softmax

3.训练环境:

 1.cuda 9.0 运算环境

 2.cudnn 7.05 运算环境

 3.GTX 960 Nvidia显卡,显存4G

 4.Linux ubuntu 64位操作系统

 5.操作系统内存 8G

 6.Tensorflow-gpu 框架

 7.Tensorboard 训练过程可视化

4.计算过程简述

卷积层:

卷积输入层数据为28*28的二位矩阵,第一卷积层节点个数设置为32个(即:神经元个数为32个),卷积方式采用填充0的方式,使得卷积后的数据大小保持28*28。池化层使用最大池化(max-pooling)方式。第一次卷积过后,数据量变为:28*28*32,对数据进行第一次max-pooling,数据维度变为:14*14*32,。第二卷基层节点个数设置为64个,卷积过后(同样采取填充0的方式使得卷积后图像的height, 和 width不变)数据维度为:14*14*64,进行max-pooling:7*7*64.

 

全连接层:

卷积层最后输出的数据维度为:7*7*64,在第一个全连接层设置1024个神经元节点,那么全连接输入层与全连接第一层的weights_1维度为:(7*7*64) ×(1024), bias_1 维度为 1*1024。Fc_1层采用Relu激活函数。

第二层全连接层神经元个数设置为10个,因为我们最终所要预测的结果集中的标签种类只有10类。fc_2层:weights_2:1024*10, bias: 1*10。激活函数采用Softmax函数,输出结果为输入数据所属每一类的概率。

5.代码实现

# -*- coding: utf-8 -*-
"""
    python文件说明:卷积神经网络的程序
"""
import tensorflow as tf
from tensorflow.examples.tutorials.mnist import input_data

mnist = input_data.read_data_sets('MNIST_data', one_hot=True)
batch_size = 100
n_batch = mnist.train.num_examples // batch_size

 

导入tensorflow框架,mnist数据集,one_hot作用:将训练数据结果标签向量化,eg: 9 : 0000000001; 2:0010000000

Batch_size:每一批次数据量的大小(数据是分批次训练)

 
#初始化权值
def 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)

 

这里的两个函数分别初始化权值,和偏执值shape是初始化权值w的形状(维度数)(和bias的维度数)

#卷基层
def conv2d(x, w):
    return tf.nn.conv2d(x, w, strides=[1,1,1,1
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值