TensorFlow02-手写数字的识别
1 数据集
使用灰度图片处理,每一张图片大小都标准化为一个28行,28列,每一个像素点的灰度值是0-256,其中255表示纯黑,0表示纯白,然后这个图片就可以标准化为[0-28,0-28,1]=像素灰度,如果是彩色相片的话可能会是[0-28,0-28,3]
在这里我们也会做一个打平的操作,就是把[28,28]->[784],就是每一行拼接起来,就是这个样子
2 输入和输出
如果就是x:[b,784],这里的b可以是个数
然后输出就是一个类别,但是这个类别的话,我们通常会用one-hot编码表示,不知道one-hot编码的可以看一下这个博客
其实就是[1,0,0,0,0,0],如果它输入第一类的话,第一个就是你1,属于第几类然后对应位置就是1.
3 Regression VS Classification Procedure
3.1 分析
首先这里我们的输入x是一个矩阵,然后我们输出就变成了这个out=x@w+b,
这是得到的结果是out:[0.1,0.8,0.002,0.008],这些里面相加的和是1,然后我们发现里面最大的是类别1,是0.8,我们就会认为他是类别1
3.2 实现
在这里例如,我们最后的类别有10种,所以最后的到的得是一个[1,10]
然后我们的x:[b,784],然后我们呢的x要和w进行矩阵相乘,所以我们的w要是[784,10],然后我们就可以利用梯度下降法求解,你以为这样就完了吗?nonono,我们的图片是很高维的,然后我们如果只是使用一个简单的线性模型就解决了这未免也太简单了吧。然后我们需要进入一个非线性的激活函数
3.3 激活函数(ReLU)
所以我们要引入一个非线性的因子out=f(x@w+b),然后我们把f(x@w+b)叫做激活函数,一种很常见的形式是ReLU,这个ReLU是非线性的,因为线性的是y=x
但是这样还是太简单了,所以我们就想起了这种类似于火车车厢的算法,每一节有都给他一个输入、输出到最后就得到结果。
类似于这种
4 Particularly
这里有个类似于降维的感觉,看这个结果从784->512->256->10
▪ 𝑋 = [𝑣1, 𝑣2, … , 𝑣784]
▪ 𝑋: [1, 784]
▪ ℎ1 = 𝒓𝒆𝒍𝒖(𝑋@𝑊1 + 𝑏1)
▪ 𝑊1 : [784, 512] //[1,784]@[784,512]+[512]=[1,512]
▪ 𝑏1 : [1, 512]
▪ ℎ2 = 𝒓𝒆𝒍𝒖(ℎ1@𝑊2 + 𝑏2)
▪ 𝑊2 : [512, 256] //[1,512]@[512,256]+[256]=[1,256]
▪ 𝑏2 : [256]
▪ 𝑜𝑢𝑡 = 𝒓𝒆𝒍𝒖(ℎ2@𝑊3 + 𝑏3)
▪ 𝑊3 : [256, 10] //[1,256]@[256,10]+[10]=[1,10]
▪ 𝑏3 : [10]
这里有点类似于降维的感觉,从[784]降到10
之后就变成了这样,然后就是取到这个最大的0.8为其结果
计算Loss(MSE)
我们最后输出的结果是一个one-hot
但是这个也是有损失的,比如说这个x轴是1,我们的out并不是在x轴上,我们希望我们的out越来越逼近于x,来减小这个损失
所以我们就是使用MSE方法使得out->Label,其实这个MSE就是算
Classification Procedure步骤
我们会发现我们没有看到Deep Learning?
其实我们已经做了一个简单的Deep Learning,我们这里只弄了三次,也就是只Learning了三次,如果我们Learning了30,300次