tensorflow应用于手写数字识别(第二版)
import tensorflow as tf
from tensorflow.examples.tutorials.mnist import input_data#载入数据集
mnist = input_data.read_data_sets("F:\\TensorflowProject\\MNIST_data",one_hot=True) #每个批次的大小,训练时一次100张放入神经网络中训练
batch_size = 100 #计算一共有多少个批次
n_batch = mnist.train.num_examples//batch_size #定义两个placeholder
x = tf.placeholder(tf.float32,[None,784])
#0-9十个数字
y = tf.placeholder(tf.float32,[None,10])
keep_prob = tf.placeholder(tf.float32)
lr = tf.Variable(0.001,dtype=tf.float32) #创建一个神经网络
# W = tf.Variable(tf.zeros([784,10]))
# b = tf.Variable(tf.zeros([10]))
W1 = tf.Variable(tf.truncated_normal([784,500],stddev=0.1))
b1 = tf.Variable(tf.zeros([500])+0.1)
L1 = tf.nn.tanh(tf.matmul(x,W1)+b1)
L1_drop = tf.nn.dropout(L1,keep_prob) #隐藏层1
W2 = tf.Variable(tf.truncated_normal([500,300],stddev=0.1))
b2 = tf.Variable(tf.zeros([300])+0.1)
L2 = tf.nn.tanh(tf.matmul(L1_drop,W2)+b2)
L2_drop = tf.nn.dropout(L2,keep_prob) #隐藏层2
W3 = tf.Variable(tf.truncated_normal([300,10],stddev=0.1))
b3 = tf.Variable(tf.zeros([10])+0.1)
#L3 = tf.nn.tanh(tf.matmul(L2_drop,W3)+b3)
#L3_drop = tf.nn.dropout(L3,keep_prob)
prediction = tf.nn.softmax(tf.matmul(L2_drop,W3)+b3) #W4 = tf.Variable(tf.truncated_normal([1000,10],stddev=0.1))
#b4 = tf.Variable(tf.zeros([10])+0.1)
#prediction = tf.nn.softmax(tf.matmul(L3_drop,W4)+b4) #二次代价函数
#loss = tf.reduce_mean(tf.square(y-prediction))
#交叉熵
#loss值最小的时候准确率最高
#loss = tf.nn.softmax_cross_entropy_with_logits(labels=y,logits=prediction)
loss = tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits(labels=y,logits=prediction))
#使用梯度下降法
#train_step = tf.train.GradientDescentOptimizer(0.2).minimize(loss)
#训练
train_step = tf.train.AdamOptimizer(lr).minimize(loss) #初始化变量
init = tf.global_variables_initializer() #结果存放在一个布尔型列表中
correct_prediction = tf.equal(tf.argmax(y,1),tf.argmax(prediction,1))
#求准确率
accuracy = tf.reduce_mean(tf.cast(correct_prediction,tf.float32))
#
with tf.Session() as sess:
sess.run(init)
for epoch in range(30):
sess.run(tf.assign(lr,0.001*(0.95 ** epoch)))
for batch in range(n_batch):
batch_xs,batch_ys = mnist.train.next_batch(batch_size)
sess.run(train_step,feed_dict={x:batch_xs,y:batch_ys,keep_prob:1.0}) #测试准确率
#test_acc = sess.run(accuracy,feed_dict={x:mnist.test.images,y:mnist.test.labels,keep_prob:1.0})
#train_acc = sess.run(accuracy,feed_dict={x:mnist.train.images,y:mnist.train.labels,keep_prob:1.0})
learning_rate = sess.run(lr)
test_acc = sess.run(accuracy,feed_dict={x:mnist.test.images,y:mnist.test.labels,keep_prob:1.0})
print("Iter: "+str(epoch)+" ,Testing Accuracy "+str(test_acc)+" Train : "+str(learning_rate))
####运行效果
Extracting F:\TensorflowProject\MNIST_data\train-images-idx3-ubyte.gz
Extracting F:\TensorflowProject\MNIST_data\train-labels-idx1-ubyte.gz
Extracting F:\TensorflowProject\MNIST_data\t10k-images-idx3-ubyte.gz
Extracting F:\TensorflowProject\MNIST_data\t10k-labels-idx1-ubyte.gz
Iter: 0 ,Testing Accuracy 0.9509 Train : 0.001
Iter: 1 ,Testing Accuracy 0.9622 Train : 0.00095
Iter: 2 ,Testing Accuracy 0.9669 Train : 0.0009025
Iter: 3 ,Testing Accuracy 0.9691 Train : 0.000857375
Iter: 4 ,Testing Accuracy 0.9725 Train : 0.000814506
Iter: 5 ,Testing Accuracy 0.9748 Train : 0.000773781
Iter: 6 ,Testing Accuracy 0.9752 Train : 0.000735092
Iter: 7 ,Testing Accuracy 0.9769 Train : 0.000698337
Iter: 8 ,Testing Accuracy 0.9778 Train : 0.00066342
Iter: 9 ,Testing Accuracy 0.9779 Train : 0.000630249
Iter: 10 ,Testing Accuracy 0.9777 Train : 0.000598737
Iter: 11 ,Testing Accuracy 0.9785 Train : 0.0005688
Iter: 12 ,Testing Accuracy 0.98 Train : 0.00054036
Iter: 13 ,Testing Accuracy 0.9798 Train : 0.000513342
Iter: 14 ,Testing Accuracy 0.9796 Train : 0.000487675
Iter: 15 ,Testing Accuracy 0.9801 Train : 0.000463291
Iter: 16 ,Testing Accuracy 0.9805 Train : 0.000440127
Iter: 17 ,Testing Accuracy 0.9803 Train : 0.00041812
Iter: 18 ,Testing Accuracy 0.9808 Train : 0.000397214
Iter: 19 ,Testing Accuracy 0.9799 Train : 0.000377354
Iter: 20 ,Testing Accuracy 0.9798 Train : 0.000358486
Iter: 21 ,Testing Accuracy 0.9802 Train : 0.000340562
Iter: 22 ,Testing Accuracy 0.9812 Train : 0.000323534
Iter: 23 ,Testing Accuracy 0.9813 Train : 0.000307357
Iter: 24 ,Testing Accuracy 0.9816 Train : 0.000291989
Iter: 25 ,Testing Accuracy 0.9798 Train : 0.00027739
Iter: 26 ,Testing Accuracy 0.9822 Train : 0.00026352
Iter: 27 ,Testing Accuracy 0.9816 Train : 0.000250344
Iter: 28 ,Testing Accuracy 0.9822 Train : 0.000237827
Iter: 29 ,Testing Accuracy 0.9811 Train : 0.000225936
tensorflow应用于手写数字识别(第二版)的更多相关文章
- Android+TensorFlow+CNN+MNIST 手写数字识别实现
Android+TensorFlow+CNN+MNIST 手写数字识别实现 SkySeraph 2018 Email:skyseraph00#163.com 更多精彩请直接访问SkySeraph个人站 ...
- 基于tensorflow的MNIST手写数字识别(二)--入门篇
http://www.jianshu.com/p/4195577585e6 基于tensorflow的MNIST手写字识别(一)--白话卷积神经网络模型 基于tensorflow的MNIST手写数字识 ...
- 基于TensorFlow的MNIST手写数字识别-初级
一:MNIST数据集 下载地址 MNIST是一个包含很多手写数字图片的数据集,一共4个二进制压缩文件 分别是test set images,test set labels,training se ...
- Tensorflow之MNIST手写数字识别:分类问题(1)
一.MNIST数据集读取 one hot 独热编码独热编码是一种稀疏向量,其中:一个向量设为1,其他元素均设为0.独热编码常用于表示拥有有限个可能值的字符串或标识符优点: 1.将离散特征的取值扩展 ...
- Tensorflow实现MNIST手写数字识别
之前我们讲了神经网络的起源.单层神经网络.多层神经网络的搭建过程.搭建时要注意到的具体问题.以及解决这些问题的具体方法.本文将通过一个经典的案例:MNIST手写数字识别,以代码的形式来为大家梳理一遍神 ...
- TensorFlow 卷积神经网络手写数字识别数据集介绍
欢迎大家关注我们的网站和系列教程:http://www.tensorflownews.com/,学习更多的机器学习.深度学习的知识! 手写数字识别 接下来将会以 MNIST 数据集为例,使用卷积层和池 ...
- TensorFlow(四):手写数字识别
一:数据集 采用MNIST数据集:-->官网 数据集被分成两部分:60000行的训练数据集和10000行的测试数据集. 其中每一张图片包含28*28个像素,我们把这个数组展开成一个向量,长度为2 ...
- Tensorflow之MNIST手写数字识别:分类问题(2)
整体代码: #数据读取 import tensorflow as tf import matplotlib.pyplot as plt import numpy as np from tensorfl ...
- TensorFlow(五):手写数字识别加强版
# 该版本的最终识别准确率达到98%以上 import tensorflow as tf from tensorflow.examples.tutorials.mnist import input_d ...
随机推荐
- Matplotlib 教程
Matplotlib是python中最流行的数据绘图库,使用matplotlib,您可以绘制任何类型的图形. 本教程的目标是让您轻松学会使用matplotlib绘制复杂的图形. 预备知识 熟悉Pyth ...
- LINQ---查询表达式的结构
重要事项: 子句必须按照一定的顺序出现 from子句和select...group子句这两部分是必须的 其他子句是可选的 在LINQ查询表达式中,select子句在表达式最后. 可以后任意多的from ...
- 落谷p1325雷达安装(计算几何)
传送门 //p1325雷达安装 //很明显雷达应该安装在海岸线上 //而为了满足一个点被覆盖那在区间[x - sqrt(d ^ 2 - y ^ 2), x + sqrt(d ^ 2 - y ^ 2)] ...
- Django 利用第三方平台实现用户注册02
前言: 上篇博客我们已经对设置了图形验证码,短信验证码对用户信息进行了一些简单的验证,本篇博客我们会将上篇的一些验证方法进行结合,来进一步完成我们的注册工作 1. 创建视图类 在user中的view创 ...
- Kubernetes 各版本镜像列表
以下镜像列表由 kubeadm v1.11.1 导出,若使用预下载镜像离线部署的方式部署,请使用 kubeadm v1.11.1 版本 导出各版本镜像列表: kubeadm config images ...
- POJ 3436:ACM Computer Factory 网络流
ACM Computer Factory Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 6247 Accepted: 2 ...
- jackson处理json
原文连接 工具下载: jackson-core-2.2.3.jar 核心jar包,下载地址 jackson-annotations-2.2.3.jar 该包提供Json注解支持,下载地址 jackso ...
- Java笔记--异常
1.异常分为两类: --1)Error:Java虚拟机无法解决的严重问题(例如资源耗尽等): --2)Exception:其他编程错误或偶然的外在因素导致的一般性问题(例如空指针异常.读取的文件不存在 ...
- Oracle delete 之后恢复数据
当我们粗心大意直接delete from不加条件而又没有回滚的时候有一个很简单的方法能够将数据恢复到delete之前的状态 第一种方案已经帮助我解决了实际问题.第二种方案暂未实践 在此记录下以便日后查 ...
- delphi的dbgrid控件点击title排序
procedure TfrmMain.DBGridEhTitleClick(Column: TColumnEh);var i : integer;begin for i:= 1 to DBGridEh ...