这次对最近学习tensorflow的总结,以理解MNIST手写字识别案例为例来说明
0、数据解释
数据为图片,每个图片是28像素*28像素,带有标签,类似于X和Y,X为28像素*28像素的数据,Y为该图片的真实数字,即标签。
1、数据的处理
以一个图片为例
先转为上图右方的矩阵,然后将矩阵摊平为1*784的向量,28*28 = 784,这里的X有784个特征。
标签数据为0-9这10个数,为了方便处理,也将数据向量化,例如,3处理为 [0,0,0,1,0,0,0,0,0,0] ,5处理为 [0,0,0,0,1,0,0,0,0,0]
2、数据的读入
用代码来下载数据并读取
#加载tensorflow包
import tensorflow as tf
#加载读取函数
from tensorflow.examples.tutorials.mnist import input_data
#读数据,one_hot表示将矩阵处理为行向量,即28*28 => 1*784
mnist = input_data.read_data_sets("MNIST_data/", one_hot=True)
Successfully downloaded train-images-idx3-ubyte.gz 9912422 bytes.
Extracting MNIST_data/train-images-idx3-ubyte.gz
Successfully downloaded train-labels-idx1-ubyte.gz 28881 bytes.
Extracting MNIST_data/train-labels-idx1-ubyte.gz
Successfully downloaded t10k-images-idx3-ubyte.gz 1648877 bytes.
Extracting MNIST_data/t10k-images-idx3-ubyte.gz
Successfully downloaded t10k-labels-idx1-ubyte.gz 4542 bytes.
Extracting MNIST_data/t10k-labels-idx1-ubyte.gz
表示下载成功了。
训练数据集有55,000 条,即X为55,000 * 784的矩阵,那么Y为55,000 * 10的矩阵
3、模型
这里采用softmax 回归的方法,下面介绍softmax模型:
我们知道MNIST的每一张图片都表示一个数字,从0到9。我们希望得到给定图片代表每个数字的概率。比如说,我们的模型可能推测一张包含9的图片代表数字9的概率是80%但是判断它是8的概率是5%(因为8和9都有上半部分的小圆),然后给予它代表其他数字的概率更小的值。
这是一个使用softmax回归(softmax regression)模型的经典案例。softmax模型可以用来给不同的对象分配概率。即使在之后,我们训练更加精细的模型时,最后一步也需要用softmax来分配概率。
softmax回归(softmax regression)分两步:第一步
为了得到一张给定图片属于某个特定数字类的证据(evidence),我们对图片像素值进行加权求和。如果这个像素具有很强的证据说明这张图片不属于该类,那么相应的权值为负数,相反如果这个像素拥有有利的证据支持这张图片属于这个类,那么权值是正数。
我们也需要加入一个额外的偏置量(bias),因为输入往往会带有一些无关的干扰量。因此对于给定的输入图片 x 它代表的是数字 i 的证据可以表示为