使用tensorflow框架搭建全连接神经网络,用于识别手写体数字,希望对大家有帮助。
import tensorflow as tffrom tensorflow.examples.tutorials.mnist import input_data# 获取数据集# one_hot设置为True,将标签数据转化为0/1,如[1,0,0,0,0,0,0,0,0,0]mnist=input_data.read_data_sets('MNIST_data',one_hot=True)# 定义一个批次的大小batch_size=100n_batch=mnist.train.num_examples//batch_size# 定义两个placeholder# 行数值为None,None可以取任意数,本例中将取值100,即取决于pitch_size# 列数值为784,因为输入图像尺寸已由28*28转换为1*784x=tf.placeholder(tf.float32,[None,784])y=tf.placeholder(tf.float32,[None,10])# 定义两个变量w=tf.Variable(tf.zeros([784,10]))b=tf.Variable(tf.zeros([10]))# 定义一个神经网络# softmax的作用是将tf.matmul(x,w)+b的结果转换为概率值,举例如下:# [9,2,1,1,2,1,1,2,1,1]# [0.99527,0.00091,0.00033,0.00033,0.00091,0.00033,0.00033,0.00091,0.00033,0.00033]prediction=tf.nn.softmax(tf.matmul(x,w)+b)# 定义损失函数loss=tf.reduce_mean(tf.square(y-prediction))# 定义优化器optimizer=tf.train.GradientDescentOptimizer(0.2)# 定义模型,优化器通过调整loss里的参数,使loss不断减小train=optimizer.minimize(loss)# 统计准确率# tf.argmax返回第一个参数中最大值的下标# tf.equal比较两个参数是否相等,返回True或Falsecorrect_prediction=tf.equal(tf.argmax(y,1),tf.argmax(prediction,1))# tf.cast将布尔类型转换为浮点类型accuracy=tf.reduce_mean(tf.cast(correct_prediction,tf.float32))with tf.Session() as sess:sess.run(tf.global_variables_initializer())# epoch为周期数,所有批次训练完为一个周期for epoch in range(20):for batch in range(n_batch):# 每次取出batch_size条数据进行训练batch_xs,batch_ys=mnist.train.next_batch(batch_size)sess.run(train,feed_dict={x:batch_xs,y:batch_ys})acc = sess.run(accuracy,feed_dict={x:mnist.test.images,y:mnist.test.labels})print('epoch=',epoch,' ','acc=',acc)
版本信息:
OS:Win7 64位 or Win10 64位
python:3.6.x
tensorboard:1.6.0
tensorflow:1.4.0
tensorflow-tensorboard:0.4.0
备注:安装tensorflow1.4.0时自动安装tensorflow-tensorboard0.4.0
#####################################################
MNIST_data文件解压后与Python文件放在同一文件夹下即可使用,MNIST_data文件下载链接:
链接:/s/1k65qXdFhmy_9SBlrBQ9H5A
提取码:81im
#####################################################
运行结果: