刚开始我没想到损失函数还需要定义forward函数,导致在自定义损失函数反向传播时报出下列的问题。后面即使我定义forward函数,还是报错如上图所示:RuntimeError: one of the variables needed for gradient computation has been modified by an inplace operation: [torch.cuda.FloatTensor [100, 40727]], which is output 0 of SoftmaxBackward0, is at version 200; expected version 0 instead. Hint: enable anomaly detection to find the operation that failed to compute its gradient, with torch.autograd.set_detect_anomaly(True).
这个问题大家都发生了,有相当一部分在softmax函数中遇到的,我的也是:
在softmax函数后加.clone()函数即可解决问题。我理解的就是正常张量的赋值就是没有梯度参与的赋值。