Tensorflow——MNIST手写数字数据集识别分类,准确率达到98%以上的方法实验

本文介绍了使用Tensorflow构建的神经网络,该网络包含两层隐藏层,通过调整学习率、应用Dropout算法(尽管在实验中保持为1.0)以及采用交叉熵损失函数和Adam优化器,实现了对MNIST手写数字数据集的高精度分类,测试准确率超过98%。
摘要由CSDN通过智能技术生成

1、网络设计 

  • 首先我们设计一个具有两层隐藏层的神经网络作为训练MNIST数据集的网络;
  • 将学习率设置为变量(每迭代一次,按公式减小学习率,目的为了使得收敛速度更快);
  • 将Dropout算法引入,但是并不使用它(keep_prob设置为1.0),只为了说明此项也是可以更改的,对准确率都一定的影响;
  • 使用交叉熵(cross-entropy)代价函数计算loss
  • 使用Adam优化器,对loss进行操作,使得loss最小

2、网络的实现

     网络如下:

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])
#再定义一个placeholder,后面设置Dropout参数
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))  #截断的正态分布中输出随机值,标准差:stddev
#偏置值
b1 = tf.Variable(tf.zeros([500]) + 0.1)
#使用激活函数,获得信号输出,即此层神经元的输出
L1 = tf.nn.tanh(tf.matmul(x, W1) + b1)
#调用tensorflow封装好的dropout函数,keep_prob参数是设置有多少的神经元是工作的,在训练时,通过feed操作将确切值传入
L1_drop = t
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值