Training loop
ถึงเวลาที่ความพยายามทั้งหมดในการกำหนด architecture ของโมเดลและ loss function จะได้รับผลลัพธ์จริง: ได้เวลาเทรนโมเดลแล้ว! หน้าที่ของคุณคือสร้างและรัน training loop ของ GAN โปรดทราบว่ามีคำสั่ง break วางไว้หลัง batch แรกของข้อมูล เพื่อป้องกันไม่ให้ใช้เวลารันนานเกินไป
ออปติไมเซอร์ทั้งสองตัว ได้แก่ disc_opt และ gen_opt ถูก initialize เป็นออปติไมเซอร์แบบ Adam() แล้ว ฟังก์ชันสำหรับคำนวณ loss ที่คุณกำหนดไว้ก่อนหน้านี้ ได้แก่ gen_loss() และ disc_loss() พร้อมใช้งานแล้ว รวมถึง dataloader ที่เตรียมไว้ให้แล้วเช่นกัน
ระลึกไว้ว่า:
- อาร์กิวเมนต์ของ
disc_loss()ได้แก่:gen,disc,real,cur_batch_size,z_dim - อาร์กิวเมนต์ของ
gen_loss()ได้แก่:gen,disc,cur_batch_size,z_dim
แบบฝึกหัดนี้เป็นส่วนหนึ่งของหลักสูตร
Deep Learning สำหรับภาพด้วย PyTorch
คำแนะนำการฝึกหัด
- คำนวณ discriminator loss โดยใช้
disc_loss()โดยส่ง generator, discriminator, ตัวอย่างภาพจริง, ขนาด batch ปัจจุบัน และขนาด noise เป็น16ตามลำดับนี้ แล้วกำหนดผลลัพธ์ให้กับd_loss - คำนวณ gradient โดยใช้
d_loss - คำนวณ generator loss โดยใช้
gen_loss()โดยส่ง generator, discriminator, ขนาด batch ปัจจุบัน และขนาด noise เป็น16ตามลำดับนี้ แล้วกำหนดผลลัพธ์ให้กับg_loss - คำนวณ gradient โดยใช้
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