tensorflow实现神经网络的优化

本文介绍了在TensorFlow中神经网络的优化,包括复杂度与学习率的关系,如何设置合适的学习率,常用的激活函数及其特性,损失函数如均方误差和交叉熵的使用,以及欠拟合和过拟合的识别与应对策略。特别讨论了正则化在缓解过拟合中的作用,如L1和L2正则化。
摘要由CSDN通过智能技术生成

tensorflow笔记系列文章均参考自中国大学Mooc上北京大学软件与微电子学院曹建老师的《Tensorflow笔记2》课程。曹建老师讲的非常棒,受益良多,强烈建议tensorflow初学者学习。

1 复杂度和学习率

1.1 神经网络复杂度

神经网络复杂度多用神经网络层数和神经网络参数的个数来表示。

空间复杂度:

  • 层数 = 隐藏层层数 + 1个输出层。例如下图的神经网络为两层(1层隐藏层 + 1个输出层)
  • 总参数 = 总w + 总b。例如下图的神经网络第一层参数个数为3*4+4,第二层神经网络个数为4*2+2,所以一共有26个参数。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-dHLvFh2p-1596169483071)(C:\Users\xiao\AppData\Roaming\Typora\typora-user-images\image-20200730110726117.png)]

时间复杂度:

  • 乘加运算的次数,例如上图的神经网络第一层经历了3*4次运算,第二层经历了4*2次运算,一共运算次数是20次。

1.2 神经网络学习率

对于学习率来说,我们知道的是,学习率设置过小,模型收敛会很慢,学习率设置过大,模型可能不收敛。那么怎样设置一个合适的学习率呢,可以使用指数衰减学习率来解决这个问题。公式如下:

指数衰减学习率 = 初始学习率*学习率衰减率**(当前轮数/多少轮衰减一次)

1.3 激活函数

优秀的激活函数:

  • 非线性:激活函数非线性时,多层神经网络可逼近所有函数
  • 可微性:优化器大多用梯度下降更新参数
  • 单调性:当激活函数是单调的,能保证单层网络的损失函数是凸函数
  • 近似恒等性:f(x)约等于x,当参数初始化为随机小值时,神经网络更稳定

激活函数输出值的范围:

  • 激活函数输出为有限值时,基于梯度的优化方法更稳定
  • 激活函数输出为无限值时,建议调小学习率

2 损失函数

**损失函数(loss)**就是预测值与已知答案的差距,神经网络的优化目标就是找到一套参数,使得损失函数的值最小。

损失函数的定义常使用均方误差(mse),在tensorflow中可以用以下方式来定义:loss_mse = tf.reduce_mean(tf.square(y_ - y)),其中y_是真实值,y是预测值。

除此之外,损失函数的定义还能使用均方误差和交叉熵,自定义损失函数就不介绍了,下面介绍一下交叉熵函数。

**交叉熵函数CE(Cross Entropy)**表示两个概率分布之间的距离:
H ( y − , y ) = − ∑ y − ∗ l n y H(y_ -, y) = -\sum{y_ -*lny} H(y,

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值