设计了两个隐藏层,激活函数是tanh,使用Adam优化算法,学习率随着epoch的增大而调低

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 = 32
#计算一共有多少个批次
n_batch = mnist.train.num_examples // batch_size #定义两个placeholder
x = tf.placeholder(tf.float32,[None,784])
y = tf.placeholder(tf.float32,[None,10])
keep_prob=tf.placeholder(tf.float32)
lr = tf.Variable(0.001, dtype=tf.float32) #创建一个简单的神经网络
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) 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) W3 = tf.Variable(tf.truncated_normal([300,10],stddev=0.1))
b3 = tf.Variable(tf.zeros([10])+0.1)
prediction = tf.nn.softmax(tf.matmul(L2_drop,W3)+b3) #交叉熵代价函数
loss = tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits(labels=y,logits=prediction))
#训练
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))#argmax返回一维张量中最大的值所在的位置
#求准确率
accuracy = tf.reduce_mean(tf.cast(correct_prediction,tf.float32)) with tf.Session() as sess:
sess.run(init)
for epoch in range(51):
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}) learning_rate = sess.run(lr)
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(acc) + ", Learning Rate= " + str(learning_rate)) #
Iter 0, Testing Accuracy= 0.954, Learning Rate= 0.001
Iter 1, Testing Accuracy= 0.9624, Learning Rate= 0.00095
Iter 2, Testing Accuracy= 0.9668, Learning Rate= 0.0009025
Iter 3, Testing Accuracy= 0.9665, Learning Rate= 0.000857375
Iter 4, Testing Accuracy= 0.9725, Learning Rate= 0.00081450626
Iter 5, Testing Accuracy= 0.9738, Learning Rate= 0.0007737809
Iter 6, Testing Accuracy= 0.9769, Learning Rate= 0.0007350919
Iter 7, Testing Accuracy= 0.9771, Learning Rate= 0.0006983373
Iter 8, Testing Accuracy= 0.9777, Learning Rate= 0.0006634204
Iter 9, Testing Accuracy= 0.9764, Learning Rate= 0.0006302494
Iter 10, Testing Accuracy= 0.9753, Learning Rate= 0.0005987369
Iter 11, Testing Accuracy= 0.9779, Learning Rate= 0.0005688001
Iter 12, Testing Accuracy= 0.9777, Learning Rate= 0.0005403601
Iter 13, Testing Accuracy= 0.9774, Learning Rate= 0.0005133421
Iter 14, Testing Accuracy= 0.9772, Learning Rate= 0.000487675
Iter 15, Testing Accuracy= 0.9803, Learning Rate= 0.00046329122
Iter 16, Testing Accuracy= 0.9802, Learning Rate= 0.00044012666
Iter 17, Testing Accuracy= 0.9791, Learning Rate= 0.00041812033
Iter 18, Testing Accuracy= 0.9806, Learning Rate= 0.00039721432
Iter 19, Testing Accuracy= 0.9803, Learning Rate= 0.0003773536
Iter 20, Testing Accuracy= 0.9796, Learning Rate= 0.00035848594
Iter 21, Testing Accuracy= 0.9803, Learning Rate= 0.00034056162
Iter 22, Testing Accuracy= 0.9788, Learning Rate= 0.00032353355
Iter 23, Testing Accuracy= 0.9819, Learning Rate= 0.00030735688
Iter 24, Testing Accuracy= 0.975, Learning Rate= 0.000291989
Iter 25, Testing Accuracy= 0.9808, Learning Rate= 0.00027738957
Iter 26, Testing Accuracy= 0.9814, Learning Rate= 0.0002635201
Iter 27, Testing Accuracy= 0.9802, Learning Rate= 0.00025034408
Iter 28, Testing Accuracy= 0.9809, Learning Rate= 0.00023782688
Iter 29, Testing Accuracy= 0.9811, Learning Rate= 0.00022593554
Iter 30, Testing Accuracy= 0.9816, Learning Rate= 0.00021463877
Iter 31, Testing Accuracy= 0.9812, Learning Rate= 0.00020390682
Iter 32, Testing Accuracy= 0.9815, Learning Rate= 0.00019371149
Iter 33, Testing Accuracy= 0.9815, Learning Rate= 0.0001840259
Iter 34, Testing Accuracy= 0.9813, Learning Rate= 0.00017482461
Iter 35, Testing Accuracy= 0.981, Learning Rate= 0.00016608338
Iter 36, Testing Accuracy= 0.9806, Learning Rate= 0.00015777921
Iter 37, Testing Accuracy= 0.9818, Learning Rate= 0.00014989026
Iter 38, Testing Accuracy= 0.982, Learning Rate= 0.00014239574
Iter 39, Testing Accuracy= 0.9813, Learning Rate= 0.00013527596
Iter 40, Testing Accuracy= 0.9818, Learning Rate= 0.00012851215
Iter 41, Testing Accuracy= 0.9827, Learning Rate= 0.00012208655
Iter 42, Testing Accuracy= 0.9826, Learning Rate= 0.00011598222
Iter 43, Testing Accuracy= 0.9814, Learning Rate= 0.00011018311
Iter 44, Testing Accuracy= 0.9823, Learning Rate= 0.000104673956
Iter 45, Testing Accuracy= 0.9828, Learning Rate= 9.944026e-05
Iter 46, Testing Accuracy= 0.9824, Learning Rate= 9.446825e-05
Iter 47, Testing Accuracy= 0.9824, Learning Rate= 8.974483e-05
Iter 48, Testing Accuracy= 0.983, Learning Rate= 8.525759e-05
Iter 49, Testing Accuracy= 0.9827, Learning Rate= 8.099471e-05
Iter 50, Testing Accuracy= 0.9828, Learning Rate= 7.6944976e-05

最终达到了0.9828的准确率

手工设计神经MNIST使分类精度达到98%以上的更多相关文章

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

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

  2. ECCV 2018 | Bi-Real net:超XNOR-net 10%的ImageNet分类精度

    这项工作由香港科技大学,腾讯 AI lab,以及华中科技大学合作完成,目的是提升二值化卷积神经网络(1-bit CNN)的精度.虽然 1-bit CNN 压缩程度高,但是其当前在大数据集上的分类精度与 ...

  3. 10. 混淆矩阵、总体分类精度、Kappa系数

    一.前言 表征分类精度的指标有很多,其中最常用的就是利用混淆矩阵.总体分类精度以及Kappa系数. 其中混淆矩阵能够很清楚的看到每个地物正确分类的个数以及被错分的类别和个数.但是,混淆矩阵并不能一眼就 ...

  4. 3.keras-简单实现Mnist数据集分类

    keras-简单实现Mnist数据集分类 1.载入数据以及预处理 import numpy as np from keras.datasets import mnist from keras.util ...

  5. 6.keras-基于CNN网络的Mnist数据集分类

    keras-基于CNN网络的Mnist数据集分类 1.数据的载入和预处理 import numpy as np from keras.datasets import mnist from keras. ...

  6. FasterRCNN 提升分类精度(转)

    近年来,随着深度学习的崛起,计算机视觉得到飞速发展.目标检测作为计算机视觉的基础算法,也搭上了深度学习的快车.基于Proposal的检测框架,从R-CNN到Faster R-CNN,算法性能越来越高, ...

  7. Win8设计——现代设计,可使你的应用脱颖而出的元素

    Microsoft 设计准则 Windows 在现代设计方面遥遥领先.它采用了“真实数字”原则并从瑞士风格和交通枢纽的寻路系统中汲取灵感. 阅读详细信息 设计元素 动态磁贴 动态磁贴向你提供了一个独特 ...

  8. MNIST数据集分类简单版本

      import tensorflow as tf from tensorflow.examples.tutorials.mnist import input_data #载入数据集 mnist = ...

  9. 神经网络MNIST数据集分类tensorboard

    今天分享同样数据集的CNN处理方式,同时加上tensorboard,可以看到清晰的结构图,迭代1000次acc收敛到0.992 先放代码,注释比较详细,变量名字看单词就能知道啥意思 import te ...

随机推荐

  1. cnblogs博客使用LaTeX公式

    $ Entropy\ H(X) = -\sum p(X)\log p(X) $ $ Information\ Gain\ I(X,Y)= H(X)-H(X|Y) $ $ \pi $ = 3.14159 ...

  2. 用Maven搭建简单的SpringMVC框架

    本文会详细阐述如何用Maven搭建一个简单的SpringMVC框架 这里就不介绍SpringMVC框架了,咱们直接来搭建 第一步 创建一个Maven的web项目  这里有一个简单的方法 new一个Ma ...

  3. java高并发核心要点|系列5|CPU内存伪共享

    上节提到的:伪共享,今天我们来说说. 那什么是伪共享呢? 这得从CPU的缓存结构说起.以下如图,CPU一般来说是有三级缓存,1 级,2级,3级,越上面的,越靠近CPU的,速度越快,成本也越高.也就是说 ...

  4. ZROI 19.08.02 计算几何

    1.向量基础知识 \(atan2\)可以求极角,但是不是特别精确,在坐标接近\(10^{9}\)时会出锅,安全的做法是叉积. 旋转.反射和平移等都可以抽象为矩阵,即,它们可以复合.(需要一些必修四知识 ...

  5. 11.关于django的content_type表

    ****** Django的contenttype表中存放发的是app名称和模型的对应关系 contentType使用方式 - 导入模块 from django.contrib.contenttype ...

  6. 一张图解释Linux文件系统中硬链接和软链接的区别

    如图所示,硬链接与原始文件共用一个inode,但inode是不跨文件系统的(Ext3.Ext4),每个文件系统都有自己的inode列表.因此,硬链接是没办法跨文件系统的 而软链接不同,软链接相当于重新 ...

  7. 使用 XSLT 显示 XML

    通过使用 XSLT,您可以向 XML 文档添加显示信息. 使用 XSLT 显示 XML XSLT 是首选的 XML 样式表语言. XSLT (eXtensible Stylesheet Languag ...

  8. .net2.0 Thread 多线程

    序言 第1章  线程基础 System.Threading Join C#中的Thread中的ApartmentState几种状态(STA,MTA,Unknown)详解 System.Threadin ...

  9. 20175308 2018-2019-2 实验四 《Android开发基础》实验报告

    20175308 2018-2019-2 实验四 <Android开发基础>实验报告 实验要求 参考 Android开发简易教程 完成云班课中的检查点,也可以先完成实验报告,直接提交.注意 ...

  10. #学号 20175201张驰 《Java程序设计》第10周课下作业MyList

    参见附件,补充MyList.java的内容,提交运行结果截图(全屏) 课下推送代码到码云 public class MyList { public static void main(String [] ...