我这次的代码需要使用判别器,正确用法应该如下所示
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) 在判别器部分和生成器部分完全不同。。。太奇怪了