入坑runtime error : tryingtobackwardthroughthegraphasecondtime,butthesavedintermediateresultshavealreadybenfreed.specifred
通过查阅资料,我们发现调用backward时出现的问题,即重要的反向传播计算是错误的。 使用图像示例
forIinrange(1000 ) :#opt.zero_grad ) #计算损耗cri=nn.MSELoss ) ) loss=CRI ) out1,target.T ) #反向传播loss.backkk loss.data )用pytorch构建的计算图是动态图,很明显,代码有1000次迭代,为了避免立即释放,必须添加标志retain_graph=True
重写
loss.backward (retain _ graph=true )坑2跳,所以代码完成了吗? 不! 不! 不! 又弄错了!
我错了很久
运行时间错误3360 oneofthevariablesneededforgradientcomputationhasbeenmodifiedbyaninplaceoperation 3360 [ torch.float tensor ] expected version1instead.hint : enableanomalydetectiontofindtheoperationthatfailedtocomputeitsgradient,with torch.auto gro
这就是说梯度供不应求了,出现了nan吗? 仔细看这个代码的话,会不会缺了什么? 是的,我缺了头。
的整个反复过程,因为没有输入特征,所以可以反复毛发。 不就是在第一次迭代之后出现了nan吗!
给您正确的代码!
forIinrange(1000 ) : # )网络out1=net(x ) x ) #清除opt.zero_grad ) #计算损耗cri=nn.MSELoss ) loss=CRI ) out1
没有的优化程序,自己做!
#构建优化:丢失——梯度清零——反向传播##forIinrange(1000 ) : ) CRI=nn.MSEloss ) #loss=CRI ) out, target.T ) #归零#net.zero_grad(##后传播# loss.backward (retain _ graph=true ) #更新权重# l _ rate=
pytorch基础知识