首页 > 解决方案 > pytorch中ADAM优化的停止标准/规则?

问题描述

在下面的代码中,我们定义了两个函数,然后使用 adam 和 pytorch 做一些优化。该代码似乎有效。但是,我们为 adam 优化执行了预定义的迭代次数(参见 while 循环)。我们如何根据优化的输出设置停止标准?我们尝试使用的此类标准的一个示例是目标函数的改进小于给定阈值或任何类似的值。

import torch
import torch.optim as optim

def myFirstFunction(parameter_current_here):
    optimalValue=100000000000000
    for j in range(2,10):
        i= torch.ones(1,requires_grad=True)*j
        optimalValueNow=i*parameter_current_here.sum()
        if (optimalValueNow<optimalValue):
            optimalValue=optimalValueNow

    return optimalValueNow,i

def mySecondFunction(Current):
    y=(20*Current)/2 + (Current**2)/10
    return y

parameter_current = torch.randn(2, 2,requires_grad=True)
optimizer = optim.Adam([parameter_current], lr = 0.1)
counter=0
while counter<5:
    optimizer.zero_grad()
    outputMyFirstFunction=myFirstFunction(parameter_current)
    outputmySecondFunction=mySecondFunction(outputMyFirstFunction[0]) 
    outputmySecondFunction.backward()
    optimizer.step()
    print("outputMyFirstFunction after backward:",outputMyFirstFunction)
    print("outputmySecondFunction after backward:",outputmySecondFunction)
    print("parameter_current Gradient after backward:",parameter_current.grad)

    counter=counter+1

您的帮助将不胜感激。谢谢,阿里

标签: pythonoptimizationgradientpytorchgradient-descent

解决方案


推荐阅读