在简介中我刚刚改变了
loss = tf.reduce_mean(tf.square(y - y_data))
到
loss = tf.reduce_mean(tf.abs(y - y_data))
并且模型无法学习损失随着时间的推移变得越来越大。为什么?
在简介中我刚刚改变了
loss = tf.reduce_mean(tf.square(y - y_data))
到
loss = tf.reduce_mean(tf.abs(y - y_data))
并且模型无法学习损失随着时间的推移变得越来越大。为什么?
我尝试了这个并得到了相同的结果。
这是因为.abs
对于一个简单的优化器来说,梯度更难跟随到最小值,不像平方差,梯度缓慢接近零,绝对差的梯度有一个固定的幅度,会突然反转,这往往会使优化器围绕最低点。基本梯度下降对梯度的大小和学习率非常敏感,学习率本质上只是步长的梯度乘数。
最简单的解决方法是降低学习率,例如更改线
optimizer = tf.train.GradientDescentOptimizer(0.5)
到
optimizer = tf.train.GradientDescentOptimizer(0.05)
此外,与不同的优化器一起玩。有些人将能够更好地应对.abs
基于损失的损失。