训练循环
终于,前面为模型结构和损失函数所做的努力要见成效了:现在开始训练!您的任务是实现并运行 GAN 的训练循环。注意:为了避免运行时间过长,在第一批数据后放置了一个 break 语句。
两个优化器 disc_opt 和 gen_opt 已初始化为 Adam() 优化器。您之前定义的用于计算损失的函数 gen_loss() 和 disc_loss() 可以直接使用。dataloader 也已为您准备好。
请回忆:
disc_loss()的参数为:gen、disc、real、cur_batch_size、z_dim。gen_loss()的参数为:gen、disc、cur_batch_size、z_dim。
本练习是课程的一部分
使用 PyTorch 进行图像深度学习
练习说明
- 使用
disc_loss()按顺序传入生成器、判别器、真实图像样本、当前批大小,以及噪声维度16来计算判别器损失,并将结果赋给d_loss。 - 使用
d_loss计算梯度。 - 使用
gen_loss()按顺序传入生成器、判别器、当前批大小,以及噪声维度16来计算生成器损失,并将结果赋给g_loss。 - 使用
g_loss计算梯度。
交互式实操练习
通过完成这段示例代码来试试这个练习。
for epoch in range(1):
for real in dataloader:
cur_batch_size = len(real)
disc_opt.zero_grad()
# Calculate discriminator loss
d_loss = ____
# Compute gradients
____
disc_opt.step()
gen_opt.zero_grad()
# Calculate generator loss
g_loss = ____
# Compute generator gradients
____
gen_opt.step()
print(f"Generator loss: {g_loss}")
print(f"Discriminator loss: {d_loss}")
break