卜若的代码笔记-python系列-神经网络篇-第十一章:tensorflow的CNN的激活(预测过程)

1.激活过程本质上是一个预测过程

如果你仔细研究过深度学习的线性回归函数,你其实会发现,里面最重要的三个概念

1.假设函数(预测函数,激活函数)

2.代价函数(损失函数,相关函数)

3.梯度下降

而假设函数本质上就是一个预测,预测你的这个输入进到这个线性回归模型之后,你的输出是多少。

一定要注意,没有经历过代价函数,你永远不知道你的输出是不是对的。不要用你的直观感受去理解这个过程,是非常严格的哟。

2.卷积的激活(预测过程)

你其实可以发现,在线性回归里面呢,我们自己定义了线性回归模型

比如

y = kx+b

这个模型已经确定了,只是参数k,和b不知道,我们通过预测,输入x,得到一个y',然后让y'和x对应的代价值(代价函数,损失函数)deltay,这个deltay将会作为梯度下降模块的输入,计算出k和b应该更新的值dk,db,然后执行更新。

而在Loginstic回归里面呢,我们的预测模型不依旧是人为设计的y函数

只是,我们其实会发现线性回归模型存在很大的局限性,就是,它太直了。

当然,我们可以通过添加高次项让它变弯,只是,这样有一个非常严重的问题,就是,我们的代价函数毕竟是非线性的,两个非线性函数再一起就容易导致局部极小。

为了尽可能的解决这个问题,我们的预测函数需要加上一个非线性因素,而这个非线性因素叫做:Logists函数,也叫做Sigmoid函数。

现在,我们回到卷积神经网络里面。

然后我们会发现,预测函数本身其实就是网络的卷积层(如果是非卷积网络,那就是它的全连接层)

这也是为什么神经网络很牛逼的重要原因。

这样有一个牛逼到爆炸的好处就是,我们终于不要去手动设计一个回归(分类模型)

因为从无数数据中要尝试分析出这样一个模型,即使你是高斯转世..大概能实现吧...哈哈(秒怂)

可是呢,我们拥有了这神经网络层的预测模型,我们依旧可能会陷入局部极小,为了解决这个问题,我们需要提出的一种解决办法就是让卷积层通过一个非线性函数,这样负负得正,就能很大可能解决这个问题。

而在tf里面,非线性过程其实是相当容易的。

就直接调用

conv = tf.nn.relu(conv)

 这样一个卷积层(我们的预测函数)+非线性层(Relu优化局部极小)

就能构成一个单层的卷积神经网络。

而如果你再存在一个代价,并通过梯度下降进行优化,你就可以实现一个完整的卷积神经网络了!

下一章,我们将会完整的用单层神经网络去实现手写数字识别

发布了225 篇原创文章 · 获赞 11 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/qq_37080133/article/details/104234483
今日推荐