首先是不含隐层的神经网络, 输入层是784个神经元 输出层是10个神经元

代码如下

#coding:utf-8
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 #定义两个placeholder
x = tf.placeholder(tf.float32, [None,784]) #输入图像
y = tf.placeholder(tf.float32, [None,10]) #输入标签 #创建一个简单的神经网络 784个像素点对应784个数 因此输入层是784个神经元 输出层是10个神经元 不含隐层
#最后准确率在92%左右
W = tf.Variable(tf.zeros([784,10])) #生成784行 10列的全0矩阵
b = tf.Variable(tf.zeros([1,10]))
prediction = tf.nn.softmax(tf.matmul(x,W)+b) #二次代价函数
loss = tf.reduce_mean(tf.square(y-prediction))
#使用梯度下降法
train_step = tf.train.GradientDescentOptimizer(0.2).minimize(loss) #初始化变量
init = tf.global_variables_initializer() #结果存放在布尔型列表中
#argmax能给出某个tensor对象在某一维上的其数据最大值所在的索引值
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(21): #21个epoch 把所有的图片训练21次
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})
acc = sess.run(accuracy,feed_dict={x:mnist.test.images, y:mnist.test.labels})
print ("Iter " + str(epoch) + ",Testing Accuracy " + str(acc))

结果如下

Iter 0,Testing Accuracy 0.8304
Iter 1,Testing Accuracy 0.8704
Iter 2,Testing Accuracy 0.8821
Iter 3,Testing Accuracy 0.8876
Iter 4,Testing Accuracy 0.8932
Iter 5,Testing Accuracy 0.8968
Iter 6,Testing Accuracy 0.8995
Iter 7,Testing Accuracy 0.9019
Iter 8,Testing Accuracy 0.9033
Iter 9,Testing Accuracy 0.9048
Iter 10,Testing Accuracy 0.9065
Iter 11,Testing Accuracy 0.9074
Iter 12,Testing Accuracy 0.9084
Iter 13,Testing Accuracy 0.909
Iter 14,Testing Accuracy 0.9094
Iter 15,Testing Accuracy 0.9112
Iter 16,Testing Accuracy 0.9117
Iter 17,Testing Accuracy 0.9128
Iter 18,Testing Accuracy 0.9127
Iter 19,Testing Accuracy 0.9132
Iter 20,Testing Accuracy 0.9144

接下来是含一个隐层的神经网络,输入层是784个神经元,两个隐层都是100个神经元,输出层是10个神经元,迭代500次,最后准确率在88%左右,汗。。。。准确率反而降低了,慢慢调参吧

#coding:utf-8
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 = 50
#计算一共有多少个批次
n_batch = mnist.train.num_examples // batch_size #定义两个placeholder
x = tf.placeholder(tf.float32, [None,784]) #输入图像
y = tf.placeholder(tf.float32, [None,10]) #输入标签 #定义神经网络中间层
Weights_L1 = tf.Variable(tf.random_normal([784,100]))
biase_L1 = tf.Variable(tf.zeros([1,100]))
Wx_plus_b_L1 = tf.matmul(x, Weights_L1)+biase_L1
L1 = tf.nn.tanh(Wx_plus_b_L1) #使用正切函数作为激活函数 Weights_L2 = tf.Variable(tf.random_normal([100,100]))
biase_L2 = tf.Variable(tf.zeros([1,100]))
Wx_plus_b_L2 = tf.matmul(L1, Weights_L2)+biase_L2
L2 = tf.nn.tanh(Wx_plus_b_L2) #使用正切函数作为激活函数 #定义神经网络输出层
Weights_L3 = tf.Variable(tf.random_normal([100,10]))
biase_L3 = tf.Variable(tf.zeros([1,10]))
Wx_plus_b_L3 = tf.matmul(L2,Weights_L3) + biase_L3
prediction = tf.nn.tanh(Wx_plus_b_L3) #二次代价函数
loss = tf.reduce_mean(tf.square(y-prediction))
#使用梯度下降法
train_step = tf.train.GradientDescentOptimizer(0.2).minimize(loss) #初始化变量
init = tf.global_variables_initializer() #结果存放在布尔型列表中
#argmax能给出某个tensor对象在某一维上的其数据最大值所在的索引值
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(500):
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})
acc = sess.run(accuracy,feed_dict={x:mnist.test.images, y:mnist.test.labels})
print ("Iter " + str(epoch) + ",Testing Accuracy " + str(acc))
Iter 487,Testing Accuracy 0.8847
Iter 488,Testing Accuracy 0.8853
Iter 489,Testing Accuracy 0.878
Iter 490,Testing Accuracy 0.8861
Iter 491,Testing Accuracy 0.8863
Iter 492,Testing Accuracy 0.8784
Iter 493,Testing Accuracy 0.8855
Iter 494,Testing Accuracy 0.8787
Iter 495,Testing Accuracy 0.881
Iter 496,Testing Accuracy 0.8837
Iter 497,Testing Accuracy 0.8817
Iter 498,Testing Accuracy 0.8837
Iter 499,Testing Accuracy 0.8866

Tensorflow学习教程------普通神经网络对mnist数据集分类的更多相关文章

  1. TensorFlow——LSTM长短期记忆神经网络处理Mnist数据集

    1.RNN(Recurrent Neural Network)循环神经网络模型 详见RNN循环神经网络:https://www.cnblogs.com/pinard/p/6509630.html 2. ...

  2. 机器学习与Tensorflow(3)—— 机器学习及MNIST数据集分类优化

    一.二次代价函数 1. 形式: 其中,C为代价函数,X表示样本,Y表示实际值,a表示输出值,n为样本总数 2. 利用梯度下降法调整权值参数大小,推导过程如下图所示: 根据结果可得,权重w和偏置b的梯度 ...

  3. 深度学习(一)之MNIST数据集分类

    任务目标 对MNIST手写数字数据集进行训练和评估,最终使得模型能够在测试集上达到\(98\%\)的正确率.(最终本文达到了\(99.36\%\)) 使用的库的版本: python:3.8.12 py ...

  4. TensorFlow初探之简单神经网络训练mnist数据集(TensorFlow2.0代码)

    from __future__ import print_function from tensorflow.examples.tutorials.mnist import input_data #加载 ...

  5. Tensorflow学习教程------实现lenet并且进行二分类

    #coding:utf-8 import tensorflow as tf import os def read_and_decode(filename): #根据文件名生成一个队列 filename ...

  6. TensorFlow——CNN卷积神经网络处理Mnist数据集

    CNN卷积神经网络处理Mnist数据集 CNN模型结构: 输入层:Mnist数据集(28*28) 第一层卷积:感受视野5*5,步长为1,卷积核:32个 第一层池化:池化视野2*2,步长为2 第二层卷积 ...

  7. Tensorflow学习教程------过拟合

    Tensorflow学习教程------过拟合   回归:过拟合情况 / 分类过拟合 防止过拟合的方法有三种: 1 增加数据集 2 添加正则项 3 Dropout,意思就是训练的时候隐层神经元每次随机 ...

  8. deep_learning_LSTM长短期记忆神经网络处理Mnist数据集

    1.RNN(Recurrent Neural Network)循环神经网络模型 详见RNN循环神经网络:https://www.cnblogs.com/pinard/p/6509630.html 2. ...

  9. Tensorflow学习教程------读取数据、建立网络、训练模型,小巧而完整的代码示例

    紧接上篇Tensorflow学习教程------tfrecords数据格式生成与读取,本篇将数据读取.建立网络以及模型训练整理成一个小样例,完整代码如下. #coding:utf-8 import t ...

随机推荐

  1. CC3200 飞行计划

    CC3200 飞行计划 2016-01-25 CC3200 资源 CC3200_JTAG调试 CC3200-Uniflash 烧写程序 Mosquitto搭建MQTT 服务器 [示例] CC3200_ ...

  2. 用BusyBox制作Linux最小系统

    1.下载busybox-1.30.1 地址:https://busybox.net/downloads/busybox-1.30.1.tar.bz2 2.解压:tar xvf busybox-1.30 ...

  3. openCV 3.4 windows下的配置说明

    链接: https://pan.baidu.com/s/1dkS_G8ZSBD8EnhYeEFZxhQ 密码: xu99 (从官网下的, 但360会提示有毒, 哈哈哈) 运行exe, 解压openCV ...

  4. 如何让Dev支持c++11特性

    1.点击工具选择编译选项 2.在编译时加入以下命令点击之后再将-std=c++11加入,点击确定就ok了

  5. 043、Java中逻辑运算之实现位与操作

    01.代码如下: package TIANPAN; /** * 此处为文档注释 * * @author 田攀 微信382477247 */ public class TestDemo { public ...

  6. 盘姬工具箱WV1.10

    ========================================================================== {盘姬工具箱CruiserEXPforWin版是一 ...

  7. 启动Eureka出现错误:Archive for required library in project cannot be read or is not a valid ZIP file

    To fix issues like that, let Maven download the files again: Delete the folder D:/mypath/.m2/reposit ...

  8. 对状态字的理解 尤其是 首次检测位“/FC”的想法

    状态字 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0               BR CC1 CC0 OV OS OR STA RLO /FC 问题1 关于首次检测位& ...

  9. 官网英文版学习——RabbitMQ学习笔记(六)Routing

    有选择的接收消息. 上一节我们使用的是fanout exchange来实现消息的发布/订阅模式,这并没有给我们带来多大的灵活性——它只能够让人盲目地进行广播.而本节我们采用direct类型的交换器来实 ...

  10. 【LeetCode】重新安排行程

    [问题]给定一个机票的字符串二维数组 [from, to],子数组中的两个成员分别表示飞机出发和降落的机场地点,对该行程进行重新规划排序.所有这些机票都属于一个从JFK(肯尼迪国际机场)出发的先生,所 ...