运行 loss.backward() 的时候报错
RuntimeError: one of the variables needed for gradient computation has been modified by an inplace operation…
经过网上提示,发现没有用。
于是自己找了原因。慢慢发现是自己的每次网络输入出的问题。
源代码
ite[j, n - 2 : n] = temp
# my_step=torch.randn(1,1,n).to(device)
# output = model(my_step)
output = model(ite[j])
运行到后面 loss.backward() 就报错了。
采用注释的代码发现不是网络问题,是输入问题。
修改成:
# ite[j, n - 2 : n] = temp
my_step=torch.cat((ite[j, : n - 2],temp),dim=0)
# my_step=torch.randn(1,1,n).to(device)
output = model(my_step)
可以运行了。
总结:一般我们在训练网络的时候,输入数据是事前准备好的,按照batch_size取到放进网络就好,但是难免有时候会想要动态的修改输入数据,再训练,我这里就是修改了一下输入,所以出了问题。究竟底层原因是啥也不是很清楚,个人想法是放入GPU的输入数据不要轻易更改,可以另外新建变量的方式进行修改其中部分的值。