本文是书籍《TensorFlow深度学习》的学习笔记之一
理论部分
手写数字图片集
模型的泛化能力是指模型在新样本上也有良好的表现。为了提高泛化能力,我们应该尽量增加数据集的规模和多样性,使得我们用于学习的训练数据集和真实的手写数字图片的分布逼近,例如每个人手写数字都有不同的习惯,应该尽可能采集不同书写风格的图片。
下面我们来看看图片的表示方法:
一张图片通常有h行,w列,每个点保存了像素值,像素值一般用整型数值来表达杨色强度:
- 彩色图片:使用一维的,长度为3的向量来保存R、G、B值
- 灰度图片:只需要一个数值表示强度,如0表示纯黑,255表示纯白,如下图
考虑输入格式,一张灰度图片使用矩阵的方式存储,形状为h行w列,b张图片使用[b,h,w]的张量存储,然后将矩阵打平为向量。
考虑输出格式,使用one-hot编码:如果物体属于第i类的话,将索引为i的位置设置1,其他位置设置0,如图:
由于数字之间存在天然的大小关系,但优点是方便存储,所以一般存储时候使用数字编码,计算时候使用tf.one_hot()
转换为比较稀疏的one-hot编码
误差计算
在分类问题中,更多的是采样交叉熵(Cross Entropy)损失函数,较少采用回归问题的MSE。损失函数可以定义为:
模型训练的目标是优化:
这里 o = W x + b o=Wx+b o=Wx+b
非线性模型
线性模型的表达能力偏弱,用二次多项式就能学到更合适的模型
我们可以使用一个激活函数将线性模型转换为非线性模型,如Sigmoid函数、ReLU函数,我们的目标函数变为
o = R e L U ( W x + b ) o=ReLU(Wx+b)