Python 优化器的学习速率查找器

Python 优化器的学习速率查找器,python,tensorflow,keras,deep-learning,Python,Tensorflow,Keras,Deep Learning,我目前正在读伊恩·古德费罗、约书亚·本吉奥和亚伦·库尔维尔的《深度学习》一书。在这本书中,他们提出了一个在某些约束条件下寻找最佳学习率的公式。公式是: e*=g.T*g/g.T*H*g 其中g是梯度,H是X(0)处的Hessian矩阵。 出于兴趣,我用两个变量x,y和一个随机数据点x(0)={x:1,y:1}实现了一个随机损失函数的简短脚本 import sympy as sp from sympy.abc import x, y from sympy import ordered, Matri

我目前正在读伊恩·古德费罗、约书亚·本吉奥和亚伦·库尔维尔的《深度学习》一书。在这本书中,他们提出了一个在某些约束条件下寻找最佳学习率的公式。公式是:
e*=g.T*g/g.T*H*g
其中g是梯度,H是X(0)处的Hessian矩阵。 出于兴趣,我用两个变量x,y和一个随机数据点x(0)={x:1,y:1}实现了一个随机损失函数的简短脚本

import sympy as sp
from sympy.abc import x, y
from sympy import ordered, Matrix, hessian

loss = x**2 + y**2 + 2*x + 4*y*x
v = list(ordered(loss.free_symbols))
gradient = lambda f, v: Matrix([f]).jacobian(v)
gLoss = gradient(loss, v)
hess = sp.hessian(loss,(v))
initX = gLoss.evalf(subs={x:1, y:1}) # assuming X(0) = {x:1, y:1}
check = sp.Matrix(hess.dot(initX.T)).dot(initX)
e = 0.01

if check >= 0:
  e = initX.T.dot(initX) / check
print(e)
在这个任意示例中,这为我提供了0.171232876712329的最佳学习率

不幸的是,我没有深入的tensorflow知识,让我们假设Adam优化器可以在那里试用。我们需要得到损失函数,取一个数据点(我假设小批量也可以),然后将公式应用到它,看看它是否评估了有效的学习率。然后使用默认的0.01学习率和计算的学习率运行测试,看看计算的学习率是否表现得更好,这将证明额外计算的合理性

我希望得到反馈,说明这是否可行,或者我是否遗漏了一些明显的原因,作为不可行的原因。例如,这种计算对深层神经网络是否可行