TensorFlow 入门之第一个神经网络训练 MNIST

原创 2017年08月15日 23:25:57

1. 数据处理

数据包在文章末尾

from __future__ import absolute_import  
from __future__ import division  
from __future__ import print_function  

import gzip  
import os  
import tempfile  

import numpy  
from six.moves import urllib  
from six.moves import xrange  # pylint: disable=redefined-builtin  
import tensorflow as tf  
from tensorflow.contrib.learn.python.learn.datasets.mnist import read_data_sets 

2. 构建神经网络

构建一个神经网络,用于学习神经网络的结构。
本文构建的神经网络是典型的三层神经网络,输入层、隐藏层、输出层。输入层有一个输入参数也就是有一个神经元,隐藏层定义了10个神经元,输出层有一个输出,所以也就是有一个神经元。

add_layer 函数是添加一个神经层的函数。

# -*- coding: utf-8 -*-
# 手写数字识别
# 准确度 0.8802
import input_data  
import tensorflow as tf
mnist = input_data.read_data_sets("MNIST_data/", one_hot=True)  

# 添加神经层的函数def add_layer(),它有四个参数:输入值、输入的大小、输出的大小和激励函数,我们设定默认的激励函数是None。也就是线性函数
def add_layer(inputs, in_size, out_size, activation_function=None):
    # 定义权重,尽量是一个随机变量
    # 因为在生成初始参数时,随机变量(normal distribution) 会比全部为0要好很多,所以我们这里的weights 是一个 in_size行, out_size列的随机变量矩阵。   
    Weights = tf.Variable(tf.random_normal([in_size, out_size]))
    # 在机器学习中,biases的推荐值不为0,所以我们这里是在0向量的基础上又加了0.1。
    biases = tf.Variable(tf.zeros([1, out_size]) + 0.1)
    # 定义Wx_plus_b, 即神经网络未激活的值(预测的值)。其中,tf.matmul()是矩阵的乘法。
    Wx_plus_b = tf.matmul(inputs, Weights) + biases
    # activation_function ——激励函数(激励函数是非线性方程)为None时(线性关系),输出就是当前的预测值——Wx_plus_b,
    # 不为None时,就把Wx_plus_b传到activation_function()函数中得到输出。
    if activation_function is None:
        outputs = Wx_plus_b
    else:
        # 返回输出
        outputs = activation_function(Wx_plus_b)
    return outputs

    # 添加一个神经层的函数——def add_layer()就定义好了。


def compute_accuracy(v_xs,v_ys):
    # 定义 prediction 为全局变量
    global prediction
    # 将 xs data 在 prediction 中生成预测值,预测值也是一个 1*10 的矩阵 中每个值的概率,并不是一个0-9 的值,是0-9 每个值的概率 ,比如说3这个位置的概率最高,那么预测3就是这个图片的值
    y_pre = sess.run(prediction, feed_dict={xs: v_xs})
    # 对比我的预测值y_pre 和真实数据 v_ys 的差别
    correct_prediction = tf.equal(tf.argmax(y_pre,1), tf.argmax(v_ys,1))
    # 计算我这一组数据中有多少个预测是对的,多少个是错的
    accuracy = tf.reduce_mean(tf.cast(correct_prediction, tf.float32))
    # result 是一个百分比,百分比越高,预测越准确
    result = sess.run(accuracy, feed_dict={xs: v_xs, ys: v_ys})
    return result   

xs = tf.placeholder(tf.float32,[None, 784]) #图像输入向量  每个图片有784 (28 *28) 个像素点
ys = tf.placeholder(tf.float32, [None,10]) #每个例子有10 个输出

prediction = add_layer(xs, 784, 10, activation_function=tf.nn.softmax)

#loss函数(即最优化目标函数)选用交叉熵函数。交叉熵用来衡量预测值和真实值的相似程度,如果完全相同,它们的交叉熵等于零 ,所以loss 越小 学的好
#分类一般都是 softmax+ cross_entropy
cross_entropy = tf.reduce_mean(-tf.reduce_sum(ys * tf.log(prediction),
reduction_indices=[1]))
# cross_entropy = -tf.reduce_sum(ys*tf.log(prediction))  

#train方法(最优化算法)采用梯度下降法。  优化器 如何让机器学习提升它的准确率。 tf.train.GradientDescentOptimizer()中的值(学习的效率)通常都小于1
train_step = tf.train.GradientDescentOptimizer(0.5).minimize(cross_entropy)
sess = tf.Session()

# 初始化变量
init= tf.global_variables_initializer()
sess.run(init)

for i in range(1000):
    #开始train,每次只取100张图片,免得数据太多训练太慢
    batch_xs, batch_ys = mnist.train.next_batch(50)
    sess.run(train_step, feed_dict={xs: batch_xs, ys: batch_ys})
    if i % 50 == 0:
        print(compute_accuracy(
            mnist.test.images, mnist.test.labels))

2. TensorFlow 入门之训练 MNIST

TensorFlow 入门 mnist手写数字识别目录参考:
这里写图片描述
MNIST_data数据下载地址: http://download.csdn.net/download/u012373815/9935430
源码地址:https://github.com/527515025/My-TensorFlow-tutorials
欢迎 start

版权声明:本文为博主编写文章,未经博主允许转载,转载请注明出处。

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

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

基于tensorflow的MNIST手写数字识别(三)--神经网络篇

想想还是要说点什么 抱歉啊,第三篇姗姗来迟,确实是因为我懒,而不是忙什么的,所以这次再加点料,以表示我的歉意。废话不多说,我就直接开始讲了。加入神经网络的意义 * 前面也讲到了,使...
  • wlmnzf
  • wlmnzf
  • 2016年06月17日 00:46
  • 3886

TensorFlow学习笔记(5)--实现卷积神经网络(MNIST数据集)

这里使用TensorFlow实现一个简单的卷积神经网络,使用的是MNIST数据集。网络结构为:数据输入层--卷积层1--池化层1--卷积层2--池化层2--全连接层1--全连接层2(输出层),这是一个...
  • lwplwf
  • lwplwf
  • 2017年03月08日 17:35
  • 6015

mxnet卷积神经网络训练MNIST数据集测试

import numpy as np import mxnet as mx import logging logging.getLogger().setLevel(logging.DEBUG) b...
  • chenyefei
  • chenyefei
  • 2017年08月12日 14:07
  • 361

Tensorflow之创建我的第一个神经网络

用Tensorflow创建一个神经网络拟合y=0.1*x+0.3 IDE环境 spyder3 Tensorflow 是非常重视结构的,我们得建立好了神经网络的结构,才能将数字放进去运行这个结构 ...
  • Vincentlmeng
  • Vincentlmeng
  • 2017年04月11日 10:26
  • 439

TensorFlow入门:第一个机器学习Demo

本文主要通过一个简单的 Demo 介绍 TensorFlow 初级 API 的使用方法,引导刚接触 TensorFlow 或者 机器学习的同学,能够从第一步开始学习 TensorFlow。...
  • geyunfei_
  • geyunfei_
  • 2017年12月13日 20:10
  • 445

tensorflow 学习第一个例子

import tensorflow as tf import numpy as np # 1.准备数据:使用 NumPy 生成假数据(phony data), 总共 100 个点. x_da...
  • lb521200200
  • lb521200200
  • 2017年10月24日 13:56
  • 106

基于GAN的mnist训练集图片生成神经网络实现

一、前言 1、什么是GAN? GAN主要包括了两个部分,即生成器generator与判别器discriminator。 生成器主要用来学习真实图像分布从而让自身生成的图像更加真实,以骗过判别器。判别器...
  • sinat_33741547
  • sinat_33741547
  • 2017年08月31日 19:15
  • 691

第五章 深度神经网络为何很难训练

原文 假设你是一名工程师,接到一项从头开始设计计算机的任务。某天,你在工作室工作,设计逻辑电路,构建 AND 门,OR 门等等时,老板带着坏消息进来:客户刚刚添加了一个奇特的设计需求:整个计算机的线...
  • GarfieldEr007
  • GarfieldEr007
  • 2016年04月01日 19:08
  • 1227

TensorFlow入门教程:1:安装和第一个例子程序

TensorFlow™ 是Google开源的一个采用数据流图用于数值计算的开源库。截止到目前为止在github上已经获得超过6万个Star,已经成为深度学习和机器学习方面最为受欢迎的项目,炙手可热。这...
  • liumiaocn
  • liumiaocn
  • 2017年08月14日 19:24
  • 2354
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:TensorFlow 入门之第一个神经网络训练 MNIST
举报原因:
原因补充:

(最多只允许输入30个字)