问题
在使用pytoch的backward()反向传播时报错:one of the variables needed for gradient computation has been modified by an inplace operation:…
解决办法
根据问题可以判断是因为在前向传播的过程中出现了原地操作,导致tensor被修改,反向传播时无法对原始tensor求导,总结了常见的解决办法,最后一个是我自己的解决办法。
- 检查前向传播网络是否有类似x+=1操作,换成x=x+1。
- 是否存在数组赋值操作:x[1:2]=x[1:2]*4,改成x[1:2]=x[1:2].clone()*4
- 提取网络中某个tensor的梯度时,不要直接使用,而是使用x.data。