3

TensorFlow搭建手写识别网络

 3 years ago
source link: https://jyzhu.top/2020/12/10/TensorFlow%E6%90%AD%E5%BB%BA%E6%89%8B%E5%86%99%E8%AF%86%E5%88%AB%E7%BD%91%E7%BB%9C/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

TensorFlow搭建手写识别网络

b站看的爱可可老师上传的公开课《不用博士学位玩转Tensorflow深度学习》

话说爱可可-爱生活老师真·神仙老师,我从微博关注到b站。上次宣姐问我居然也关注他们老师,我才知道是北邮的老师。羡慕!!

每层神经网络的公式:

softmax(X.W+b)

X是输入的量,假如有100张图片,每张图片784像素,那么X就是100*784

W是权重向量,假如有10个神经单元,要给784个输入的值赋权,W就是784*10

b是bias,感觉类似一个常数。它会给没一张图片的结果最后加一个同样的b

那么得到的X.W + b就是100*10, 是给100张图片分别计算的10个output,如果对应手写数字识别的最后一层,就可以理解成对应数字0-9的预测值了。用softmax针对每张图片的结果,转换成一个总合为1的概率值,其中概率最高的那个就值对应的位置(比如第六个值是98%),就是预测结果了(手写数字6)

(后边还有讲,中间层不用softmax,用sigmoid,用relu)

cross entropy损失函数

cross_entropy=−∑Y_true∗log⁡(Y)

看训练效果

image-20201209232637919.pngimage-20201209232637919.png

这是把训练和测试曲线放在一起,同时看准确率和loss。

噪声很大,像training curve那样,那说明learning rate太大了。调小点,或者让它自动下降,很ok的trick。

当出现loss图那样,training loss不断下降,test loss反升,这就是过拟合。解决方法是正则化。具体的方法其实叫dropout。

过拟合的本质:

给了模型太多自由的空间,想象它太大了,可以把训练集中每一张图都存进去,那它肯定不是在学习可以generalize的feature,而是一些easy treaty

dropout:解决过拟合

就是在每一轮训练的时候随机shoot掉一些neoron,让它值变成0。

对于CNN来说,在卷积层搞dropout,it hurts too much,所以在全连接层搞就行

image-20201209233058152image-20201209233058152

一层的simplest model

image-20201209224614996image-20201209224614996image-20201209225643852image-20201209225643852

tf.matmul是matrix multiply

image-20201209230244362image-20201209230244362

用的Gradient Descent是梯度下降啦

image-20201209230715571image-20201209230715571

概念上,前面几步只是定义要用哪些公式,是formal的,是graph的;定义好了公式之后,也方便在多gpu里跑代码。现在这一步,才是让它动起来

image-20201209231158567image-20201209231158567

回顾所有代码

多层的全连接model

全连接就是数据1维嘛,扁平的,丢失了像图片这种2维数据的形状等信息

image-20201209231606387image-20201209231606387

过去sigmoid是中间层最常用的激活函数,简单地给一个0-1之间的结果

现在有了relu,都用它: 超简单,负值舍弃为0,正值原封不动。它为啥效果更好?不知道,人们试了,它更好,仅此而已。有传说说是生物学家说现在人脑中更接近relu,计算机人就用了,真的更好。

用relu往往模型收敛得更sharply。有时候在很深的神经网络里,它俩优劣分明,用sigmoid的话模型甚至不收敛

image-20201209231908137image-20201209231908137image-20201209231624774image-20201209231624774image-20201209231649554image-20201209231649554

卷积神经网络

本质上就是保持2维的信息量嘛。它跟全连接网络有个概念上的不同,就是每层layer的4个维度(channels), 每个维度的所有神经单元用的权重向量是一样的。

image-20201209234526249image-20201209234526249image-20201209235119829image-20201209235119829

truncated_normal is just complicated way of saying ramdom

image-20201209235327646image-20201209235327646

tf的conv2d函数可以方便地让你指定步长之后,自动在图片的长和宽2维上走


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK