[神经网络] 关于学习率太大导致无法收敛的问题

import tensorflow as tf
import random
#训练函数y=2x-1,a/b分别要训练为2,-1
x=tf.placeholder(tf.float32,[1])
a=tf.Variable(tf.constant([1],dtype=tf.float32))  
#b=tf.Variable(tf.constant([1],dtype=tf.float32))
y=a*x#+b
#
_y=tf.placeholder(tf.float32,[1])
loss=tf.square(y-_y)
train=tf.train.GradientDescentOptimizer(1e-4).minimize(loss) 

sess=tf.Session()
sess.run(tf.global_variables_initializer())  
 
while True:  
  input=[random.randint(0,100)]  #不乘以0.0001,则网络无法收敛
  label=[input[0]*2] 
  print(input)
  print(label)
  _,av,bv,lossv=sess.run([train,a,a,loss],feed_dict={x:input,_y:label}) 
  if (lossv<1e-6):
    break
  print("a=%s b=%s loss=%s" %(av,bv,lossv)) 

以上网络训练参数a,使其满足y=a*x=2*x。

以下两个条件成立时,网络会无法收敛,且参数迅速扩大直至变成NaN:

input/label值过大:如0~100

学习率较大,如0.1。

分析如下:

loss对a的函数为二次函数,Loss对a的导数为一次函数,导数大小取决输入数据x/y的大小,

当学习率太高/输入数据太大,会导致导数非常大,直接跳到二次函数对称轴另一边,如下图:


如何解决这个问题:

BN应该可以很大程度上解决这个问题;

其他的就是改小学习率。。。凭经验。。

learning rate 减小10倍有时候意味网络训练非常慢。

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值