这是计算pytorch中两个不同NN的两个损失梯度的正确方法吗?

2024-09-30 00:42:11 发布

您现在位置:Python中文网/ 问答频道 /正文

我在pytorch中定义了一个NN,并创建了该网络的两个实例self.actor_critic_r1self.actor_critic_r2。我计算每个净值的损失,即loss1loss2,我将其相加,并按以下方式计算梯度

loss_r1 = value_loss_r1 + action_loss_r1 - dist_entropy_r1 * args.entropy_coef
loss_r2 = value_loss_r2 + action_loss_r2 - dist_entropy_r2 * args.entropy_coef
self.optimizer_r1.zero_grad()
self.optimizer_r2.zero_grad()
loss = loss_r1 + loss_r2
loss.backward()
self.optimizer_r1.step()
self.optimizer_r2.step()
clip_grad_norm_(self.actor_critic_r1.parameters(), args.max_grad_norm)
clip_grad_norm_(self.actor_critic_r2.parameters(), args.max_grad_norm)

或者,我应该像这样单独更新损失

self.optimizer_r1.zero_grad()
(value_loss_r1 + action_loss_r1 - dist_entropy_r1 * args.entropy_coef).backward()
self.optimizer_r1.step()
clip_grad_norm_(self.actor_critic_r1.parameters(), args.max_grad_norm)
self.optimizer_r2.zero_grad()
(value_loss_r2 + action_loss_r2 - dist_entropy_r2 * args.entropy_coef).backward()
self.optimizer_r2.step()
clip_grad_norm_(self.actor_critic_r2.parameters(), args.max_grad_norm)

我不确定这是否是更新多重丢失网络的正确方法,请提供您的建议


Tags: selfnormvaluedistargsactionoptimizeractor
1条回答
网友
1楼 · 发布于 2024-09-30 00:42:11

它应该是总和法。如果没有相互作用,那么“错误”优化器的“错误”损失梯度将为零,如果存在相互作用,您可能希望针对该相互作用进行优化

只有当您知道存在相互作用,但不想为此进行优化时,才应使用方法2

相关问题 更多 >

    热门问题