在下面的代码中,我们定义了两个函数,然后使用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
您的帮助将不胜感激。 谢谢, 艾莉