我有用 pytorch 编写的 NN 代码。在损失值计算中,当代码使用 Adam 优化方法时,损失值在循环期间不会改变,而 LBGFS 优化方法则一切正常,损失值以正常方式减少。我怎样才能摆脱这个问题?
for epo in range(epo_adam):
model.train()
optimizer_adam.zero_grad()
loss , momentum_loss , loss_data , loss_BC , continuity_loss = adop_loss_Weight(model, x, y, z, u_exact, v_exact , w_exact , p_exact ,
x_b, y_b, z_b, u_b, v_b, w_b ,p_b)
loss.backward()
if epo %500 == 0:
print(f'Epoch Adam {epo}, Total Loss: {loss.item():.10f}')
if loss.item() <=0.15 :
print("Optimzation Method is swtiching to LBGF-S . . . ")
break
for epochs in range(epochs):
model.train()
loss = optimizer.step(closure)
if epochs % 20 == 0:
print(f'Epoch LBGF-s {epochs}, Total Loss: {loss.item():.5f}')
#print(f'The highest Loss is: {max(momentum_loss.item() , continuity_loss.item() , loss_data.item() , loss_bc.item()):.6f}')
#print(time.time())
我进行了很多搜索,但找不到任何解决方案。我认为 Adam 优化中的恒定损失值是不合理的!
这里的问题是缺少对
optimizer_adam.step()
的调用,因此计算梯度后权重没有更新。