深度学习总结:GAN,3种方式实现fixedGtrainD,fixedDtrainG, retain, detach

56 篇文章 0 订阅
48 篇文章 0 订阅

retain和detach

pytorch有两个功能:retain和detach:
retain:意思是保持原来graph,可以还在原图上进行forward pass,下次计算backward还是在原图上计算;
detach:阻断,意思是backward pass到这儿就停止了

这两个东西可以用于实现fixedGtrainD,fixedDtrainG。

先更新D,再更新G,这个也是GAN论文的实现方式

先forward整个网络;
再backward整个网络的梯度但是只更新D的参数(相当于G的部分的梯度白算了),这时还需要retain graph一下;
用fake data forward一下D,再backward整个网络的梯度但是只更新G的参数;
至此完成了一轮G和D的对抗。
在这里插入图片描述

先更新G,再更新D,实际上他两谁先谁后都一样,都是相互对抗:

先forward整个网络;
再backward整个网络的梯度但是只更新G的参数(相当于D的部分的梯度只是用来传递G的梯度);
先forward整个网络,这时还需要detach一下G;
再backward到G就停止了,更新D的参数;
至此完成了一轮G和D的对抗。
在这里插入图片描述

第三种是第一种的改进, 先更新D,再更新G,计算最少,还没见到别人实现,估计知名框架这么实现,每具体检查过:

先forward整个网络,同时detach一下G,retain一下graph;
再backward到G停止了,但是只更新D的参数,同时undetach一下G,retain一下graph;用fake data forward一下D;
再backward整个网络,更新G的参数(相当于D的部分的梯度只是用来传递G的梯度);
至此完成了一轮G和D的对抗。
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值