hess_params.append(hess[0].cpu().detach().numpy() if hess[0] is not None else None)
hessian_params.append(np.array(hess_params))
return hessian_params
复制代码
关于backward和autograd
autograd只计算梯度不反向传播更新model的参数,由于这部分是torch中的优化器举行的,backward()也计算梯度,但获得具体一门路度信息需要用这个命令
grad_list = [p.grad.clone() for p in net.parameters()]
而这样得到的一门路度是不含grad_fn的,再举行求导的时候报错,虽然我也尝试loss.backward(retain_graph=True)用了这里的参数,但仍然无法解决问题,以是照旧用了autograd。但在模型更新的时候两者利用并不冲突