(吴恩达机器学习)5.神经网络模型实现

1.tensorflow进行模型实现

1.1实现的基本步骤

(1)通过输入的x和特征w和b进行输出。在上一章中所了解到的神经网络的向前传递,构建一层一层的网络层,然后构成神经网络

(2)确定损失和成本函数,这里使用的是二元熵递减函数。

(3)通过调用特定的函数实现成本的下降,从而完成对神经网络的训练

1.2 模型训练细节

回顾一开始逻辑回归模型的细节,也是三部分组成

(1)在给定输入特征x和特征参数w和b的情况下计算输出。在逻辑回归中,我们是计算w和x的点乘作为sigmoid函数的z,然后计算得出f(x)的具体值。

(2)在训练模型中指定损失函数和成本函数。损失函数是计算单个训练集实例的函数,成本函数是对于整个训练集的计算。在逻辑回归中,我们使用的损失函数是y*log(y)+(1-y)*log(1-y)。

(3)通过梯度下降算法计算出最小成本的w和b。在逻辑回归中,通过不断的梯度下降迭代,令w = w-dw。在一定迭代次数后得到

结合逻辑回归的模型实现,得到就是1.1中所述的训练神经网络模型的实现。接下来详细的了解所述三个步骤的内容

1.如何在给定的x,特征w和b计算输出

这段代码定义了整个神经网络的架构,它告诉了tensorflow一切计算最后输出的特征和函数。

2.定义我们使用什么样的成本函数

        首先先要指定所使用的损失函数,从而构成我们的成本函数。和逻辑回归所使用的sigmoid函数一致,这里使用的也是-y*log(y)-(1-y)log(1-y)。在tensorflow中,该函数有个专门的术语叫作二元交叉熵函数。值得一提的是,像上一章所述,至少目前我所学习的神经网络中的神经元实际上就是一个一个逻辑回归单元

        同时注意,如果神经网络模型所解决的并不是一个分类问题,那么我们在指定损失函数时就不在使用该二元交叉熵函数了。这时使用回归的成本函数或许会更好。

3.梯度下降计算最小成本的特征

2.激活函数

2.1Sigmoid激活函数的替代方案

        正如上文所述,目前所学习到的神经网络的神经元就是一个一个逻辑回归单元。所以说我们现在所搭建的神经网络就是大量逻辑回归组件的,其中包含了大量的sigmoid激活函数。但实际模型中,换合适的激活函数可能会对模型有更大的提升。

        以上周的畅销书为例,在对于书籍是否知道这个特征上就是单纯的0或者1,如果这时候你像让其更多元的表示呢。这时就可以转换我们的激活函数,这里引入一个新的激活函数ReLU函数

        除了ReLU函数以外,线性回归的激活函数也是我们非常常见的激活函数

2.2如何选择正确的激活函数

        具体来说,如果需要处理的是01分布类似逻辑回归的分类问题,那么sigmoid函数几乎是最自然的选择。所以如果解决的是二元问题,可以在输出层使用sigmoid函数

        其次,如果你想要预测股票走势这类回归问题,此时y的值不再局限于0,1,它可以升可以降,y的值有正有负。这时,线性激活函数会更加自然。

        最后,如果你是要预测的房价这种回归问题,要求非负但非01的,那么ReLU函数会更好

        sigmoid是我们最初所学习的激活函数,事实上在神经网络的最初阶段,sigmoid的使用也是较多的。但在现在的神经网络模型中ReLU函数更被广泛的使用,因为ReLU函数更加迅速高效。

        sigmoid函数的计算本身就更加复杂,同时sigmoid函数的梯度下降即便优化了依旧缓慢。

2.3 隐藏层不常用线性激活函数

3.多分类问题

3.1多分类问题的定义

        多分类问题仍然是一个分类问题,因为多分类中y仍然是一个离散量,而非是某个值域。只是y的取值会更多罢了。同样的,多分类问题可能就不再只有一个决策边界,可能会是多个决策边界的集合。

3.2 softmax  

        softmax回归模型是适用于多分类的一个模型,那么softmax模型的实现具体是什么样的?

        和二分的逻辑回归模型一样,多分类模型中各分类概率的和也为1。那么从如上的推导,我们可以很容易的得出softmax模型的一般式。

        这就是softmax模型的实现了。要使用该模型解决实际问题,离不开训练集数据的训练,那么该模型的成本函数如何确定呢。同样的,参考二分的逻辑模型来看一下。

3.3softmax在神经网络中的输出

        如上图,就是神经网络中softmax函数的实现。那么代码上实习softmax输出层的具体如下:

        SparseCategoricalCrossentropy就是上一节所提到的softmax的成本函数

3.4softmax的简化

        在实际的计算中,即便结果是一样的,但是因为公式表达的不同,结算的结果会有一定的误差。

        如上图,所以在softmax激活函数中,直接计算出了结果,然后赋值给a,这样就会产生误差。但如果不赋值,或者计算出z的值,将z的值带入到成本函数,然后计算结果直接放到成本函数中去。这样误差就会少很多。所以下图中激活函数改成了线性激活函数,然后线性激活函数计算出z的值带入到SparseCategoricalCrossEntropy成本函数中去,就可以在精度上有所优化

3.5多标签模式

        以下面图片分类为例,图片中是否存在公交车?私家车?行人?这样的最后输出的应该是是否存在该标签而并不是多分类分成多个类别

4.补充

4.1高级优化方法

        优化梯度下降算法,是我们一直使用的进行成本削减的算法。梯度算法中的学习率是其中一个很重要的参数,如果学习率。过高会导致下降曲线来回振荡。如果学习率太低的话又会导致每次迭代太慢。这时候,我们引入一个新的算法,adam算法。

        adam算法会动态的调整学习率的大小,如果梯度下降的方向几乎不发生变化,则会增加学习率的大小。如果梯度的下降方向变化波动太大,则会降低学习率的大小。

        adam算法的大致代码实现,通过设置optimizer参数的值,让其等于tensorflow类中的keras.optimizers.Adam参数,然后设置该参数的初始学习率。

4.2其他网络层类型

        到目前为止,我们所使用的网络层都是密集型网络层。密集型网络层确实是很好的神经网络结构,它也可以帮助你更好的了解神经网络,但除了密集型网络层,还有一些其他的网络层和属性是值得了解的

        1.卷积层

  • 23
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值