全部回帖
谢谢大佬,可以了,想问问原因是什么,求教
你这个是gan吗
是的
因为算G的loss的计算图是包含D的,但是你在G的backward之前更新了D的值,这时候再去计算就不是和forward时候对应的梯度了
真的豁然开朗,明白了,太感谢大佬了
jetbrain mono
是框架
求助大神了
老哥这是毕设吗
我上次出现这个是版本问题
老哥,哪个版本没有这个问题
不是,我方向的东西,在学习这个
奔涌吧,后浪🐶
我记得1.5有,后来我换1.3就好了
好嘞,感谢老哥
我想是因为在旧版本中 forward 的时候 context 存了需要的用来在backward时候计算梯度的值引用,而optimizer 更新 D 的时候是一个 in-place操作,改变了这个引用的值,所以会报错。而后面的版本中,也许 context 里存的不是引用,而是一个 clone 的新的值,所以就不会报这个错误了。
另外,楼主你的原代码应该是对的。我之前那样修改对于 GAN 来说是错误的,会使得 generator 的 loss 回传时会累加到 discriminator 上。而且我看到官方 tutorial 也是你原来的写法,所以更新版本可能是一个更好的选择,抱歉。
不对,应该是更新之后的 optimizer.step() 不再是 in-place 操作,这样就会分配一块新的内存,而原来的内存仍然保留着。
我看了下程序一样,难道因为我是1.5版本的😓
1.4到1.5确实不太一样。一样的代码结果完全不一样
好的,感谢老哥提醒