Open Joshuass11 opened 5 months ago
def _on_backward( self, inputs, outputs, logits, loss, gradient_accumulation_steps=1, **kwargs ): loss.backward() #在此使用pgd方式进行对抗学习扰动 self.fgm.attack(epsilon=1.0) # 在这个地方可以调整扰动的数值概率 logits = self.module(**inputs) _, attck_loss = self._get_train_loss(inputs, logits, **kwargs) attck_loss.backward() self.fgm.restore() self._on_backward_record(loss, **kwargs) return loss在这段代码里在FGM扰动前后都回传了loss,但是为什么最后返回了原来的loss呢,请问有试过相加loss和attack_loss,再返回total_loss的尝试吗?试了下单纯相加效果不好,在尝试别的权重组合,只是有点疑惑进行FGM攻击后再返回攻击前的loss符合逻辑吗?如果可以回答的话非常感谢!