深度学习-传统神经网络使用TensorFlow框架实现MNIST手写数字识别

128人阅读 评论(0) 收藏 举报
分类:

学习李伟老师《深度学习》课程

本文GitHub源码及数据下载:
https://github.com/YEN-GitHub/DeepLearning_BasicByTensorFlow/tree/master/ANN
(不断更新,喜欢可fork)


TensorFlow简介

TensorFlow中文社区:
http://www.tensorfly.cn/tfdoc/get_started/introduction.html


传统神经网络简介

机器学习-神经网络(Neural Network)算法:
http://blog.csdn.net/yen_csdn/article/details/79063768


MNIST手写数字数据集

MNIST数据库是一个手写数字的数据库,它提供了六万的训练集和一万的测试集。它的图片是被规范处理过的,是一张28px*28px的灰度图。
THE MNIST DATABASE of handwritten digits
http://yann.lecun.com/exdb/mnist/


Python代码实现

#coding=utf-8
# @Author: yangenneng
# @Time: 2018-02-06 10:02
# @Abstract:传统神经网络通过tensorflow实现mnist手写数字识别

from tensorflow.examples.tutorials.mnist import input_data
#one_hot表示独热编码,即一位有效编码
mnist=input_data.read_data_sets("../MNIST_DATA/",one_hot=True)

import tensorflow as tf

#参数定义
learning_rate=0.1 #学习率
training_epochs=30 #训练轮数
batch_size=100 #每次选取训练集中的多少张
display_step=1 #训练多少轮显示一次

#神经网络参数定义
n_input=784 #输入层神经元个数 因为图像是28*28的
n_hidden1=256 #第一个隐藏层神经元个数
n_hidden2=512
n_output=10 #输出层0-9这10个数字的分类

#tensorflow输入
x=tf.placeholder("float",[None,n_input])
y=tf.placeholder("float",[None,n_output])

#创建一个两层的传统神经网络
def multilayer_neuralNetwork_perceptron(x,weights,biases):
    # 神经网络正向传递过程,隐藏层使用ReLU非线性激活函数
    layer1=tf.add(tf.matmul(x,weights['w1']),biases['b1'])
    layer1=tf.nn.relu(layer1)

    layer2=tf.add(tf.matmul(layer1,weights['w2']),biases['b2'])
    layer2=tf.nn.relu(layer2)

    outLayer=tf.matmul(layer2,weights['w_out'])+biases['b_out']

    return outLayer

#正态分布随机初始化权重和偏向矩阵
weights={
    #行为前一层的输出个数,列为本层的神经元个数
    'w1':tf.Variable(tf.random_normal([n_input,n_hidden1])),
    'w2':tf.Variable(tf.random_normal([n_hidden1,n_hidden2])),
    'w_out':tf.Variable(tf.random_normal([n_hidden2,n_output]))
}

biases={
    'b1': tf.Variable(tf.random_normal([n_hidden1])),
    'b2': tf.Variable(tf.random_normal([n_hidden2])),
    'b_out': tf.Variable(tf.random_normal([n_output]))
}

pred=multilayer_neuralNetwork_perceptron(x,weights,biases)

#softmax_cross_entropy交叉熵函数定义代价函数,来表示输出与实际label的差别
cost=tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits(logits=pred,labels=y))
#优化程序,为了使损失降到最小反向更新权重以及偏置
optimizer=tf.train.AdadeltaOptimizer(learning_rate=learning_rate).minimize(cost)

init=tf.global_variables_initializer()
#训练数据分离,将变量,代价函数,最优控制器放入session中执行
with tf.Session() as sess:
    sess.run(init)

    print("train start.........................")
    #训练training_epochs轮
    for epoch in range(training_epochs):
        avg_cost=0.0
        total_batch=int(mnist.train.num_examples/batch_size)
        for i in range(total_batch):
            batch_x,batch_y=mnist.train.next_batch(batch_size)

            _,c=sess.run([optimizer,cost],feed_dict={x:batch_x,y:batch_y})

            avg_cost+=c/total_batch

        correct_prediction = tf.equal(tf.arg_max(pred, 1), tf.arg_max(y, 1))
        accuracy = tf.reduce_mean(tf.cast(correct_prediction, "float"))

        if epoch%display_step==0:
            print("Epoch:",'%04d' % (epoch+1),"\tcost=","{:.9f}".format(avg_cost),"\taccuracy:", accuracy.eval({x: mnist.test.images, y: mnist.test.labels}))

    print("train fineshed.........................")

    correct_prediction=tf.equal(tf.arg_max(pred,1),tf.arg_max(y,1))
    accuracy=tf.reduce_mean(tf.cast(correct_prediction,"float"))
    print("last accuracy:",accuracy.eval({x:mnist.test.images,y:mnist.test.labels}))

这里写图片描述

这里我是在TensorFlow-CPU上执行的,也可在GPU执行,速度更快,配置教程:win10+Anoconda3-2.4.0+cuda8.0+TensorFlow-GPU+Pycharm2016测试Demo-环境配置

查看评论

TensorFlow学习---实现mnist手写数字识别

卷积神经网络CNN的理论部分直接看帖子:TensorFlow学习--卷积神经网络CNN 卷积神经网络CNN的结构一般包含这几个层: 输入层:用于数据的输入 卷积层:使用卷积核进行特征提取和特征...
  • huahuazhu
  • huahuazhu
  • 2017-07-03 14:59:51
  • 821

使用tensorflow卷积神经网络实现mnist手写数字识别

在实现mnist手写数字识别的时候,看了极客网上的例子,自己试着实现了一下,但是期间发现了很多问题。于是就把值得注意的地方写在注释里面了,以供后面查阅温习。 import tensorflow as ...
  • puredreammer
  • puredreammer
  • 2017-10-30 18:25:42
  • 375

TensorFlow学习_02_CNN卷积神经网络_Mnist手写数字识别

github地址:https://github.com/lawlite19/MachineLearning_TensorFlow 或者上一篇Tensorflow的博客:http://blog.csdn...
  • u013082989
  • u013082989
  • 2016-12-16 16:54:40
  • 3927

Tensorflow 实现 MNIST 手写数字识别

本节笔记作为 Tensorflow 的 Hello World,用 MNIST 手写数字识别来探索 Tensorflow。笔记的内容来自 Tensorflow 中文社区和黄文坚的《Tensorflow...
  • u010858605
  • u010858605
  • 2017-04-09 16:05:52
  • 2557

深度学习四:tensorflow-使用卷积神经网络识别手写数字

当你安装了tensorflow后,tensorflow自带的教程演示了如何使用卷积神经网络来识别手写数字。代码路径为tensorflow-master\tensorflow\examples\tuto...
  • u011913612
  • u011913612
  • 2017-06-30 19:10:44
  • 2485

深度学习笔记——TensorFlow学习笔记(三)使用TensorFlow实现的神经网络进行MNIST手写体数字识别

本文是TensorFlow学习的第三部分,参考的是《TensorFlow实战Google深度学习框架》一书,这部分讲述的是使用TensorFlow实现的神经网络进行MNIST手写体数字识别一个实例。 ...
  • mpk_no1
  • mpk_no1
  • 2017-06-04 00:20:59
  • 2430

【TensorFlow-windows】(四) CNN(卷积神经网络)进行手写数字识别(mnist)

主要内容: 1.基于CNN的mnist手写数字识别(详细代码注释) 2.该实现中的函数总结平台: 1.windows 10 64位 2.Anaconda3-4.2.0-Windows-...
  • u011995719
  • u011995719
  • 2017-06-23 20:36:39
  • 1358

深度学习框架Caffe学习笔记(2)-MNIST手写数字识别例程

MNIST(Mixed National Institute of Standards and Technology)是一个大型手写体数字识别数据库,广泛应用与机器学习领域的训练和测试。MNIST包括...
  • u013407923
  • u013407923
  • 2016-11-08 00:34:20
  • 2403

神经网络实现手写数字识别(MNIST)

一、缘起 原本想沿着 传统递归算法实现迷宫游戏 ——> 遗传算法实现迷宫游戏 ——> 神经网络实现迷宫游戏的思路,在本篇当中也写如何使用神经网络实现迷宫的,但是研究了一下...
  • xuanwolanxue
  • xuanwolanxue
  • 2017-05-10 18:20:42
  • 5477

02:一文全解:利用谷歌深度学习框架Tensorflow识别手写数字图片(初学者篇)

02:一文全解:利用谷歌深度学习框架Tensorflow识别手写数字图片(初学者篇)标签(空格分隔): 王小草Tensorflow笔记笔记整理者:王小草 笔记整理时间2017年2月24日 Tens...
  • sinat_33761963
  • sinat_33761963
  • 2017-02-24 12:41:08
  • 9085
    个人资料
    专栏达人 持之以恒
    等级:
    访问量: 30万+
    积分: 4331
    排名: 8698
    联系方式

    博文主要参考网上资料,视频笔记,结合个人见解,仅供学习、交流使用,如有侵权,请联系博主删除。


    博客专栏
    最新评论