您的位置:首页 > 其它

多层感知机实现mnist手写数字识别

2017-11-08 21:39 357 查看
代码及重要注释:

# -*- 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)
sess=tf.InteractiveSession()

# 定义参数,其中需要讲解的是tf.truncated_normal(shape,mean,stddev):shape表示生成张量的维度,mean是均值,stddev是标准差
# truncated_normal是一个截断的正态分布,具体指的是产生正态分布的值如果与均值的差值大于两倍的标准差,那就重新生成
input_unit=784
h1_unit=300
w1=tf.Variable(tf.truncated_normal(shape=[input_unit,h1_unit],stddev=0.1))
b1=tf.Variable(tf.zeros([h1_unit]))
w2=tf.Variable(tf.zeros([h1_unit,10]))
b2=tf.Variable(tf.zeros([10]))
x=tf.placeholder(tf.float32,[None,input_unit])
# dropout操作保留节点的概率
keep_prob=tf.placeholder(tf.float32)

# 前向计算。(一个隐含层)
hidden1=tf.nn.relu(tf.matmul(x,w1)+b1)
hidden1_drop=tf.nn.dropout(hidden1,keep_prob)
y=tf.nn.softmax(tf.matmul(hidden1_drop,w2)+b2)

# 定义损失函数并且选择优化算法优化
y_=tf.placeholder(tf.float32,shape=[None,10])
cross_entropy=tf.reduce_mean(-tf.reduce_sum(y_*tf.log(y),reduction_indices=[1]))
train_step=tf.train.AdagradOptimizer(0.3).minimize(cross_entropy)

# 迭代次数:3000个batch,每个batch包含100个样本
tf.global_variables_initializer().run()
for i in range(3000):
batch_xs,batch_ys=mnist.train.next_batch(100)
sess.run(train_step,{x:batch_xs,y_:batch_ys,keep_prob:0.5})

# 在测试集上进行评估
correct_prediction=tf.equal(tf.argmax(y,1),tf.argmax(y_,1))
accuracy=tf.reduce_mean(tf.cast(correct_prediction,tf.float32))
print sess.run(accuracy,feed_dict={x:mnist.test.images,y_:mnist.test.labels,keep_prob:1})

在此过程中误将测试中的dropout比率设置为0.5,出现了0.965的正确率。因此要注意测试集上是不会实现dropout操作的,该例子的准确率是0.9764.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: