开始使用免费开始使用

训练循环

终于,前面为模型结构和损失函数所做的努力要见成效了:现在开始训练!您的任务是实现并运行 GAN 的训练循环。注意:为了避免运行时间过长,在第一批数据后放置了一个 break 语句。

两个优化器 disc_optgen_opt 已初始化为 Adam() 优化器。您之前定义的用于计算损失的函数 gen_loss()disc_loss() 可以直接使用。dataloader 也已为您准备好。

请回忆:

  • disc_loss() 的参数为:gendiscrealcur_batch_sizez_dim
  • gen_loss() 的参数为:gendisccur_batch_sizez_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
编辑并运行代码