1.加载MNIST数据集
from tensorflow.examples.tutorials.mnist import input_data
mnist=input_data.read_data_sets("MNIST_data/",one_hot=True)
注意:此处有可能报一大堆错误,如下:
TimeoutError Traceback (most recent call last)
TimeoutError: [WinError 10060] 由于连接方在一段时间后没有正确答复或连接的主机没有反应,连接尝试失败。
解决办法:
详见我的另一个帖子:http://blog.csdn.net/landcruiser007/article/details/79346982
解决报错后,出现如下说明成功:
Extracting 你的地址/MNIST_data/train-images-idx3-ubyte.gz
Extracting 你的地址/MNIST_data/train-labels-idx1-ubyte.gz
Extracting 你的地址/MNIST_data/t10k-images-idx3-ubyte.gz
Extracting 你的地址/MNIST_data/t10k-labels-idx1-ubyte.gz
2.查看MNIST数据集的情况
第一条代码:
print(mnist.train.images.shape,mnist.train.labels.shape)
出现:
(55000, 784) (55000, 10)
说明:
55000的含义:说明训练集有55000个样本。
784的含义: 图像为28*28像素的灰度图片,空白部分为0,有笔迹的地方0到1取值,总共28*28个点,即784维特征。
10的含义: 手写数字一共有0到9共10个。
测试集和验证集同理。
第二条代码:
print(mnist.test.images.shape,mnist.test.labels.shape)
出现:
(10000, 784) (10000, 10)
说明测试集有10000个样本。
第三条代码:
print(mnist.validation.images.shape,mnist.validation.labels.shape)
出现:
(5000, 784) (5000, 10)
说明验证集有5000个样本。
3.载入tensorflow库,并创建新的sess
import tensorflow as tf
sess=tf.InteractiveSession()
说明:
tensorflow所有的运算操作都在python外面,通过C++在CPU上运算完毕后,再传回python,因此需要定义一个sess,所有的运算都跑在这个sess里。
4.创建数据输入
x=tf.placeholder(tf.float32,[None,784])
说明:
placeholder是输入数据的地方。
括号内第一项参数为数据类型,这里是float32
第二项参数代表数据尺寸,None:不限制输入数据的数目
784:每个输入是784维的向量
5.实现Softmax Regression
w=tf.Variable(tf.zeros([784,10]))
b=tf.Variable(tf.zeros([10]))
y=tf.nn.softmax(tf.matmul(x,w)+b)
说明:
w:Softmax Regression中的weights
b:Softmax Regression中的biases
y:公式y=softmax(wx+b)
6.损失函数:cross entropy作为loss function
y_=tf.placeholder(tf.float32,[None,10])
cross_entropy=tf.reduce_mean(-tf.reduce_sum(y_*tf.log(y),reduction_indices=[1]))
7.使用随机梯度下降SGD算法开始训练
#学习速率0.5
train_step=tf.train.GradientDescentOptimizer(0.5).minimize(cross_entropy)
tf.global_variables_initializer().run()
for i in range(1000):
batch_xs,batch_ys=mnist.train.next_batch(100)
train_step.run({x:batch_xs,y_:batch_ys})
8.对模型正确率进行验证
correct_prediction=tf.equal(tf.argmax(y,1),tf.argmax(y_,1))
accuracy=tf.reduce_mean(tf.cast(correct_prediction,tf.float32))
print(accuracy.eval({x:mnist.test.images,y_:mnist.test.labels}))
结果:
0.919