В приведенном ниже коде мы определяем две функции, а затем проводим некоторую оптимизацию, используя adam и pytorch. Код, кажется, работает. Тем не менее, мы делаем заранее определенное количество итераций для оптимизации Адама (см. Цикл 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
Ваша помощь будет очень признательна.
Спасибо,
Aly