Я попытался изменить свой оптимизатор, но прежде всего я хочу проверить, дают ли следующие два кода одинаковые результаты:
optimizer = optim.Adam(params, lr)
for epoch in range(500):
....
optimizer.zero_grad()
loss.backward()
optimizer.step()
for epoch in range(500):
....
optimizer.zero_grad()
loss.backward()
optimizer.step()
Если я вставлю один и тот же оптимизатор между «для циклов»,
optimizer = optim.Adam(params, lr)
for epoch in range(500):
....
optimizer.zero_grad()
loss.backward()
optimizer.step()
optimizer = optim.Adam(params, lr)
for epoch in range(500):
....
optimizer.zero_grad()
loss.backward()
optimizer.step()
Результат стал плохим. Почему это происходит? Разве оптимизатор не получает только градиенты от потерь и не выполняет шаги градиентного спуска?