python - 梯度值为零的除 GradientDescentOptimizer tensorflow 以外的优化器
问题描述
我真的束手无策,不知道我还能问哪里,所以我在这里问。我知道我的问题可能不是最好的,但我希望至少能得到一些关于我应该寻找的方向的指导来解决我的问题。
我正在复制 sci-kit learn 在 tensorflow 和 tensorboard 中对 Elastic Net Multiple Linear Regression 的实现作为学习练习,因此我最终可以继续实现和可视化更困难的机器学习算法。
我有一些代码使用弹性网络正则化作为损失函数进行多元线性回归。通过梯度下降,与 sci-kit learn 的算法相比,它收敛到一个次优的解决方案。通过一些搜索,我了解到 sci-kit learn 使用 Xavier 方法初始化权重,所以我也在 tensorflow 中这样做了。性能略有提高,但仍与 sklearn 相差甚远。我的下一个改进是更改优化器以尝试匹配性能,尽管我的研究告诉我 scikit learn 使用坐标下降,这是一种未在 tensorflow 中实现的方法。
但是,这就是我卡住的地方。似乎简单地将优化器切换为另一个优化器似乎不起作用(不是我期望的那样,但我也很难找到能告诉我如何正确设置的材料)。目前我只是按以下方式执行了切换,谁能给我一个提示,为什么我的渐变为 0?
谢谢!
# Declare optimizer
my_opt = tf.train.GradientDescentOptimizer(0.001)
my_opt = tf.train.AdamOptimizer(epsilon = 0.1)
编辑:
我已将我的学习率更新为更高,但收敛性似乎仍然没有那么好。我想我会继续尝试在 tensorflow 中实现坐标下降,以尽可能接近 sci-kit learn 的方法。我为那些好奇的人附上了一张不同的图片:
与新加坡元相比: