分类学习
基于TensorFlow,实现softmax Regression手写体分类
首先先上完整的代码,过后再具体的解析:
代码
softmax Regression可以算作没有隐含层的最浅的神经网络,实现的过程主要分为四个阶段:
1. 定义算法公式,即神经网络前向传播的计算;
2. 定义损失函数,选定优化器,并且制定优化器优化损失函数;
3. 迭代地对数据进行训练;
4. 在测试集或者验证集上对准确率进行计算。
具体一些介绍和定义以及代码中重要语法看:http://www.tensorfly.cn/tfdoc/tutorials/mnist_beginners.html
1. 数据样本的处理:
首先,对于TensorFlow的输入样本进行了处理,由于上述样本是28*28的像素点,所以每个样本有784维特征(softmax regression将二维的结构转化为一维的结构,没有考虑样本的空间信息,对于以后的卷积神经网络等会充分利用图像的空间信息),所以对于训练数据的特征是55000*784的tensor;对于标签数据采用了one-hot编码(也成为一位有效位编码,其方法是使用N位状态寄存器来对N个状态进行编码,每个状态都有其独立的寄存器位,并且任何时候只有一位有效),所以每个样本的label是一个10维的向量,只有一个值为1,其余均为0。比如数字0,可以使用[1,0,0,0,0,0,0,0,0,0]表示;数字5,可以使用[0,0,0,0,0,1,0,0,0,0]表示。所以对于整个训练集的标签为55000*10的tensor表示。
2. 使用softmax regression实现手写体数字识别分类:
softmax regression会对每一种类别估算一个概率,然后选择概率值最大的类别最为最终的类别,比如预测为数字1的概率为20%,预测为数字5的概率为70%,则最终的类别为数字5。它的工作原理很简单,将可以判定为某类的特征相加,然后将这些特征转化为判定是这类的概率。它的数学表达式可以理解为:
softmax回归(softmax regression)分两步:
(1)计算每一个类别的特征:
其中 代表权重, 代表数字 i 类的偏置量,j 代表给定图片 x 的像素索引用于像素求和
(2)对所有特征计算softmax,得到预测为每一类的概率:
分母表示的含义为将每个类别的指数求和,0—9代表10个预测的类别
这个过程可以理解为先对每个类别的特征求exp函数,然后对它们进行标准化,使得和为1,特征的值越大的类别,最后输出的概率也越大。
对于softmax回归模型可以用下面的图解释
(1)对于输入的xs加权求和,再分别加上一个偏置量,最后再输入到softmax函数中:
加权求和
(2)我们也可以用向量表示这个计算过程:用矩阵乘法和向量相加。这有助于提高计算效率。(也是一种更有效的思考方式):
矩阵表示
上述的矩阵运算表达式可以简写为:
表达式