optimizer位置导致的非常奇怪的bug

我这次的代码需要使用判别器,正确用法应该如下所示
optimizer_d.zero_grad() # 清除旧的梯度

计算判别器的输出

real_outputs = discriminator(real_images)
fake_outputs = discriminator(fake_images)

计算损失

d_loss = criterion(real_outputs, real_labels) + criterion(fake_outputs, fake_labels)

反向传播

d_loss.backward()

更新判别器的参数

optimizer_d.step()

optimizer_g.zero_grad()

生成器训练代码…

optimizer_g.step()

但是我用成了

计算判别器的输出

real_outputs = discriminator(real_images)
fake_outputs = discriminator(fake_images)
optimizer_d.zero_grad() # 清除旧的梯度

计算损失

d_loss = criterion(real_outputs, real_labels) + criterion(fake_outputs, fake_labels)

反向传播

d_loss.backward()

更新判别器的参数

optimizer_d.step()

optimizer_g.zero_grad()

生成器训练代码…

g_loss = criterion(real_outputs, real_labels)
optimizer_g.step()

导致同样的输入,criterion(real_outputs, real_labels) 在判别器部分和生成器部分完全不同。。。太奇怪了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值