TensorFlow——深入MNIST

程序(有些不甚明白的地方改日修订):

  1 # _*_coding:utf-8_*_
  2
  3 import inputdata
  4 mnist = inputdata.read_data_sets(‘MNIST_data‘, one_hot=True)    # mnist是一个以numpy数组形式存储训练、验证和测试数据的轻量级类
  5
  6 import tensorflow as tf
  7 sess = tf.InteractiveSession()
  8
  9
 10 x = tf.placeholder("float",shape=[None, 784])
 11 y_ = tf.placeholder("float", shape=[None, 10])
 12
 13 W = tf.Variable(tf.zeros([784, 10]))
 14 b = tf.Variable(tf.zeros([10]))
 15
 16 sess.run(tf.initialize_all_variables())
 17
 18 y = tf.nn.softmax(tf.matmul(x,W)+b)     # nn:neural network
 19
 20 # 代价函数
 21 cross_entropy = -tf.reduce_sum(y_ * tf.log(y))
 22
 23 # 最优化算法
 24 train_step = tf.train.GradientDescentOptimizer(0.01).minimize(cross_entropy)    # 会更新权值
 25
 26 for i in range(1000):
 27     batch = mnist.train.next_batch(50)
 28     train_step.run(feed_dict={x:batch[0], y_:batch[1]})    # 可以用feed_dict来替代任何张量,并不仅限于替换placeholder
 29
 30 correct_prediction = tf.equal(tf.argmax(y,1), tf.argmax(y_, 1))
 31
 32 accuracy = tf.reduce_mean(tf.cast(correct_prediction, "float"))
 33
 34 print accuracy.eval(feed_dict={x:mnist.test.images, y_:mnist.test.labels})
 35
 36 # 构建多层卷积网络模型
 37
 38 # 初始化W,b的函数
 39 def weight_variable(shape):
 40     initial = tf.truncated_normal(shape, stddev=0.1)    # truncated_normal表示的是截断的正态分布
 41     return tf.Variable(initial)
 42
 43 def bias_variable(shape):
 44     initial = tf.constant(0.1, shape=shape)
 45     return tf.Variable(initial)
 46
 47 # 卷积和池化
 48 def conv2d(x, W):    # 卷积用原版,1步长0边距
 49     return tf.nn.conv2d(x, W, strides=[1,1,1,1], padding=‘SAME‘)
 50
 51 def max_pool_2x2(x):    # 池化用传统的2*2模板做max polling
 52     return tf.nn.max_pool(x, ksize=[1,2,2,1], strides=[1,2,2,1], padding=‘SAME‘)
 53
 54 # 第一层卷积
 55 W_conv1 = weight_variable([5,5,1,32])
 56 b_conv1 = bias_variable([32])
 57
 58 x_image = tf.reshape(x, [-1,28,28,1])
 59
 60 h_conv1= tf.nn.relu(conv2d(x_image, W_conv1) + b_conv1)
 61 h_pool1 = max_pool_2x2(h_conv1)
 62
 63 # 第二层卷积
 64 W_conv2 = weight_variable([5, 5, 32, 64])
 65 b_conv2 = bias_variable([64])
 66
 67 h_conv2 = tf.nn.relu(conv2d(h_pool1, W_conv2) + b_conv2)
 68 h_pool2 = max_pool_2x2(h_conv2)
 69
 70 # 密集连接层
 71 W_fc1 = weight_variable([7 * 7 * 64, 1024])
 72 b_fc1 = bias_variable([1024])
 73
 74 h_pool2_flat = tf.reshape(h_pool2, [-1, 7*7*64])
 75 h_fc1 = tf.nn.relu(tf.matmul(h_pool2_flat, W_fc1) + b_fc1)
 76
 77 # dropout
 78 keep_prob = tf.placeholder("float")
 79 h_fc1_drop = tf.nn.dropout(h_fc1, keep_prob)
 80
 81 # 输出层
 82 W_fc2= weight_variable([1024, 10])
 83 b_fc2 = bias_variable([10])
 84
 85 y_conv= tf.nn.softmax(tf.matmul(h_fc1_drop, W_fc2) + b_fc2)
 86
 87 # 训练和评估模型
 88 cross_entropy = -tf.reduce_sum(y_*tf.log(y_conv))
 89 train_step = tf.train.AdamOptimizer(1e-4).minimize(cross_entropy)
 90 correct_prediction = tf.equal(tf.argmax(y_conv,1), tf.argmax(y_,1))
 91 accuracy = tf.reduce_mean(tf.cast(correct_prediction, "float"))
 92 sess.run(tf.initialize_all_variables())
 93 for i in range(20000):
 94     batch = mnist.train.next_batch(50)
 95     if i%100 == 0:
 96         train_accuracy = accuracy.eval(feed_dict={ x:batch[0], y_: batch[1], keep_prob: 1.0})
 97         print "step %d, training accuracy %g" %(i, train_accuracy)
 98     train_step.run(feed_dict={x: batch[0], y_: batch[1], keep_prob:0.5})
 99
100 print "test accuracy %g" % accuracy.eval(feed_dict={x: mnist.test.images, y_: mnist.test.labels, keep_prob: 1.0})

运行结果:

0.9092
step 0, training accuracy 0.08
step 100, training accuracy 0.9
step 200, training accuracy 0.94
step 300, training accuracy 0.98
step 400, training accuracy 0.98
step 500, training accuracy 0.9
step 600, training accuracy 0.96
step 700, training accuracy 0.96
step 800, training accuracy 0.96
step 900, training accuracy 0.94
step 1000, training accuracy 0.98
step 1100, training accuracy 1
step 1200, training accuracy 0.92
step 1300, training accuracy 0.96
step 1400, training accuracy 0.92
step 1500, training accuracy 0.98...明天早上跑出来再贴
时间: 2024-12-25 08:11:40

TensorFlow——深入MNIST的相关文章

TensorFlow深入MNIST笔记[三]

TensorFlow深入MNIST笔记[三] TensorFlow是进行大规模数值计算的强大库.其优点之一是实施和训练深层神经网络. 加载MNIST数据 from tensorflow.examples.tutorials.mnist import input_data mnist = input_data.read_data_sets('MNIST_data', one_hot=True) 这mnist是一个轻量级的类,它将训练,验证和测试集存储为NumPy数组.它还提供了一个迭代数据服务的功

使用tensorflow操作MNIST数据

本节开始学习使用tensorflow教程,当然从最简单的MNIST开始.这怎么说呢,就好比编程入门有Hello World,机器学习入门有MNIST.在此节,我将训练一个机器学习模型用于预测图片里面的数字. MNIST 是一个非常有名的手写体数字识别数据集,在很多资料中,这个数据集都会被用做深度学习的入门样例.而Tensorflow的封装让MNIST数据集变得更加方便.MNIST是NIST数据集的一个子集,它包含了60000张图片作为训练数据,10000张图片作为测试数据.在MNIST数据集中的

tensorflow识别Mnist时,训练集与验证集精度acc高,但是测试集精度低的比较隐蔽的原因

tensorflow识别Mnist时,训练集与验证集精度acc高,但是测试集精度低的比较隐蔽的原因除了网上说的主要原因https://blog.csdn.net/wangdong2017/article/details/90176323 之外,还有一种是比较隐蔽的原因(可能对于大多数人不会犯这种低级错误),作为新手的我找了半天才找到,原因是在程序中创建了一个会话之后又重新创建了一个会话,代码程序见我博客https://www.cnblogs.com/hujinzhou/p/guobao_2020

Tensorflow实现MNIST

#在pycharm上实现print后面加() # Copyright 2015 The TensorFlow Authors. All Rights Reserved.## Licensed under the Apache License, Version 2.0 (the "License");# you may not use this file except in compliance with the License.# You may obtain a copy of th

Tensorflow之MNIST解析

要说2017年什么技术最火爆,无疑是google领衔的深度学习开源框架Tensorflow.本文简述一下深度学习的入门例子MNIST. 深度学习简单介绍 首先要简单区别几个概念:人工智能,机器学习,深度学习,神经网络.这几个词应该是出现的最为频繁的,但是他们有什么区别呢? 人工智能:人类通过直觉可以解决的问题,如:自然语言理解,图像识别,语音识别等,计算机很难解决,而人工智能就是要解决这类问题. 机器学习:如果一个任务可以在任务T上,随着经验E的增加,效果P也随之增加,那么就认为这个程序可以从经

基于tensorflow的MNIST手写识别

这个例子,是学习tensorflow的人员通常会用到的,也是基本的学习曲线中的一环.我也是! 这个例子很简单,这里,就是简单的说下,不同的tensorflow版本,相关的接口函数,可能会有不一样哟.在TensorFlow的中文介绍文档中的内容,有些可能与你使用的tensorflow的版本不一致了,我这里用到的tensorflow的版本就有这个问题. 另外,还给大家说下,例子中的MNIST所用到的资源图片,在原始的官网上,估计很多人都下载不到了.我也提供一下下载地址. 我的tensorflow的版

Tensorflow实践 mnist手写数字识别

minst数据集                                         tensorflow的文档中就自带了mnist手写数字识别的例子,是一个很经典也比较简单的入门tensorflow的例子,非常值得自己动手亲自实践一下.由于我用的不是tensorflow中自带的mnist数据集,而是从kaggle的网站下载下来的,数据集有些不太一样,所以直接按照tensorflow官方文档上的参数训练的话还是踩了一些坑,特此记录. 首先从kaggle网站下载mnist数据集,一份是

莫烦TENSORFLOW(7)-mnist

import tensorflow as tffrom tensorflow.examples.tutorials.mnist import input_data#number 1 to 10 datamnist = input_data.read_data_sets('MNIST_data',one_hot=True) def add_layer(inputs,in_size,out_size,activation_function=None): Weights = tf.Variable(t

Tensorflow的MNIST进阶教程CNN网络参数理解

背景 问题说明 分析 LeNet5参数 MNIST程序参数 遗留问题 小结 背景 之前博文中关于CNN的模型训练功能上是能实现,但是研究CNN模型内部结构的时候,对各个权重系数w,偏差b的shape还是存在疑惑,为什么要取1024,为什么取7*7*64,最近找到了一些相关资料,对这个问题有了新的理解,下面和大家分享一下. 问题说明 # Input Layer x = tf.placeholder('float',[None,784]) y_ = tf.placeholder('float',[N