首先介绍本文使用的数据集MNIST手写数字数据集:
MNIST数据集的官网是http://yann.lecun.com/exdb/mnist/
是由Google实验室的Corinna Cortes和纽约大学柯朗研究所的YannLeCun建有一个手写数字数据库,训练库有60,000张手写数字图像,测试库有10,000张。
可以手动在官网下载,也可以在python中进行下载
在这里,我们提供了一份python源代码用于自动下载和安装这个数据集。你可以下载这份代码,然后用下面的代码导入到你的项目里面,也可以直接复制粘贴到你的代码文件里面。
From tensorflow.examples.tutorials.mnist importinput_data
mnist =input_data.read_data_sets("MNIST_data/", one_hot=True)
MNIST数据库会直接下载在项目的根目录下
然后进行机器学习,我将机器学习分为以下几个步骤:
Step1:导入数据
import tensorflow as tf
from tensorflow.examples.tutorials.mnist import input_data
mnist = input_data.read_data_sets("MNIST_data/", one_hot=True)
导入的MNIST数据集,如果本地中包含则直接导入,如果没有则会通过官网进行下载,数据集中的数据可以进行编码打印出来,具体的实现步骤可以在网上寻找具体的代码。
Step2:设置参数
x = tf.placeholder(tf.float32, [None,784])
w = tf.Variable(tf.zeros([784, 10]))
b = tf.Variable(tf.zeros([10]))
y = tf.nn.softmax(tf.matmul(x, w)+b)
y_ = tf.placeholder(tf.float32, [None, 10])
tf.placeholder代表占位符,具体指输入的图像和输入的标签
w代表权值矩阵
b代表偏执矩阵
softmax我理解为是激活函数
y代表预测的输出
Step3:设置损失函数
cross_entropy =tf.reduce_mean(-tf.reduce_sum(y_*tf.log(y)))
train_sept = tf.train.GradientDescentOptimizer(0.01).minimize(cross_entropy)
根据y,y_通过交叉熵构建损失函数,并用学习率0.01的梯度下降算法使得损失函数值最小
Step4:创建session,初始化所有变量
sess = tf.InteractiveSession()
tf.global_variables_initializer().run()
Step5:优化参数
for i in range(1000):
batch_xs, batch_ys =mnist.train.next_batch(100)
sess.run(train_sept, feed_dict={x:batch_xs, y_: batch_ys})
优化权值矩阵和偏置,也就是讲的训练过程
Step6:检测测试集
corrent_prediction = tf.equal(tf.argmax(y,1),tf.argmax(y_, 1))
accuracy = tf.reduce_mean(tf.cast(corrent_prediction, tf.float32))
print/
(sess.run(accuracy,feed_dict{x:mnist.test.images,y_:mnist.test.labels}))
在测试集中检测准确率
最终结果:
测试集中准确率0.9046: