如果我理解您的要求,我认为您正在寻找某种自适应学习率,就像您可能会看到应用于 ANN 中的梯度下降方法一样,以及在情况不再改善时停止的方法。
基本思想是当你没有看到你的 abs 误差发生变化时,慢慢减少你扰乱你的价值观的数量,同时保持整个过程的稳定性。如果你降低了学习率,但仍然没有看到任何改进,那么你就完成了(或者至少达到了某种局部最小值)。这种方法可能会慢一点,并且有不同的方法来计算我输入的变量(例如,sigErrChange),所以你必须稍微玩弄一下。还有一些其他的警告是我无法想到的,但希望这能传达总体思路。
例如,
lR = 1.0
updatedLR = False # Have we updated the learning rate this iteration?
while abs(error) > 50 and ( sigErrChange or updatedLR ):
sigErrChange = False # Has there been a significant improvement in the error? (Probably shouldn't just use a single iteration for this...)
# Are we adding or subtracting
if C > T:
sign = 1.
else:
sign = -1.
# Should we update the learning rate?
if (~sigErrChange)
updatedLR = True
lR = .95 * lR
# Calculate our values
c = c + sign*lR*.001
C = calcC(c, C, T)
T = calcT(c, C, T)
error = C - T