错误含义:在第二次反向计算的时候,计算图已经被释放
错误代码:
p_s = F.log_softmax(fusion_output[i] / 4, dim=0)
p_t = F.softmax(kl_store[pred[i]] / 4, dim=0)
temp_loss=F.kl_div(p_s.detach(), p_t.detach(), reduction='sum') * (4 ** 2)
正确代码:
p_s = F.log_softmax(fusion_output[i] / 4, dim=0)
p_t = F.softmax(kl_store[pred[i]] / 4, dim=0)
temp_loss=F.kl_div(p_s.detach(), p_t.detach(), reduction='sum') * (4 ** 2)
如果按照错误提示直接修改loss.backward(retain=TRUE)容易导致存储过多的计算图。所以我找了下代码,发现p_s忘记detach了,加上就好了。