赞
踩
目录
深层神经网络(DNN)是深度学习网络的特点之一-------多层和非线性。
分类函数或者回归函数是直线或者平面的时候,就是线性。如下图:
以下图形无法通过直线划分,这就是线性的局限。
不添加激活函数的模型,如下图,就只能是线性,因为w1和w2可以相乘,线性乘线性还是线性。
所以需要激活函数,来去除线性。
去线性化的结构为:
a本来为 w1x,此时加入了偏置项b(一般取为1),和非线性函数f(),变成
这个非线性函数f()就是激活函数。
一个直观的解释,从模型复杂度角度。如果我们能够增强一个学习模型的复杂度,那么它的学习能力能够提升。
如何增加神经网络的复杂度呢?要么变宽,即增加隐层网络神经元的个数;要么变深,即增加隐层的层数。
哪一种更有效?显然是后者。因为后者是用分布式表示的方法探究数据背后更本质的特征,也显示模块化的思想。
这就是层数的优势。
上一课中的损失函数,直接用一个代码式子就搞出来了。
这个代码用的是交叉熵(cross entropy)来表示loss,交叉熵是分类问题中用常用的评判方法之一。
其中y_代表真确结果,y代表预测结果。(注意:y_和y都是经过soft回归得到的概率分布)
通过tf.clip_by_value()函数将一个张量中是数值限制在一个范围之内,避免一些错误运算。
- # 定义损失函数和反向传播算法
- cross_entropy = -tf.reduce_mean(y_ * tf.log(tf.clip_by_value(y, 1e-10, 1.0))) # 损失函数
- train_step = tf.train.AdamOptimizer(0.001).minimize(cross_entropy) # 反向传播算法,一步到位
tensorflow把交叉熵和soft回归集合在一起,简化求交叉熵loss的代码:
cross_entropy=tf.nn.softmax_cross_entropy_with_logits(y,y_)
mse=tf.reduce_mean(tf.square(y_-y))
有的时候loss是分段的,就是不同情况下,求值方式不同,此时没有固定的公式,要自己设置。
比如当loss是这个分段公式,则么求?
- a = 10
- b = 1
- loss = tf.reduce_sum(tf.where(tf.greater(x,y),(x-y)*a,(y-x)*b))
loss定义完后,还是可以用反向传播算法来优化,把loss当成一个整体,优化写法还是一样的:
train_step=tf.train.AdamOptimizer(0.001).minimize(loss)
梯度下降---主要用于优化单个参数。
反向传播---在所有参数下进行梯度下降。
学习率-----每次参数更新的幅度
梯度-------偏导,斜率
直接用tensorflow的函数吧,当个黑箱。
先用大的,到一定时候,学习率变小。-------指数衰减法,这个学习率叫做衰减学习率。
指数衰减法函数 tf.train.expotential_decay()
learning_rate=tf.train.expotential_decay(0.1,global_step,100,0.96,staircase=True)
过拟合----模型过于复杂
欠拟合----模型过于简单
正则化是解决过拟合问题的一种最基本的方法。
他的思想就是在损失函数
根据R(w)的不同,分为L1正则化、L2正则化。
使模型在位置数据(测试集)上更健壮。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。