การเทรนโมเดล multi-output
เมื่อเทรนโมเดลที่มี output หลายตัว สิ่งสำคัญคือต้องกำหนด loss function ให้ถูกต้อง
ในกรณีนี้ โมเดลจะสร้าง output สองชุด ได้แก่ การทำนายตัวอักษร (alphabet) และอักขระ (character) โดยแต่ละชุดจะมี ground truth labels ที่สอดคล้องกัน ซึ่งทำให้คำนวณ loss แยกกันได้สองค่า ได้แก่ ค่า loss จากการจำแนกตัวอักษรที่ผิดพลาด และค่า loss จากการจำแนกอักขระที่ผิดพลาด เนื่องจากทั้งสองกรณีเป็นงาน multi-label classification จึงสามารถใช้ Cross-Entropy loss ได้กับทั้งคู่
อย่างไรก็ตาม Gradient descent สามารถ optimize ได้เพียง loss function เดียว ดังนั้นจึงกำหนด total loss เป็นผลรวมของ loss จากตัวอักษรและอักขระ
แบบฝึกหัดนี้เป็นส่วนหนึ่งของหลักสูตร
Deep Learning ระดับกลางด้วย PyTorch
คำแนะนำการฝึกหัด
- คำนวณ loss จากการจำแนกตัวอักษร แล้วกำหนดค่าให้กับ
loss_alpha - คำนวณ loss จากการจำแนกอักขระ แล้วกำหนดค่าให้กับ
loss_char - คำนวณ total loss โดยรวม loss ย่อยทั้งสองค่าเข้าด้วยกัน แล้วกำหนดให้กับ
loss
แบบฝึกหัดเชิงโต้ตอบแบบลงมือทำ
ลองทำแบบฝึกหัดนี้โดยเติมโค้ดตัวอย่างนี้ให้สมบูรณ์
net = Net()
criterion = nn.CrossEntropyLoss()
optimizer = optim.SGD(net.parameters(), lr=0.05)
for epoch in range(1):
for images, labels_alpha, labels_char in dataloader_train:
optimizer.zero_grad()
outputs_alpha, outputs_char = net(images)
# Compute alphabet classification loss
loss_alpha = ____
# Compute character classification loss
loss_char = ____
# Compute total loss
loss = ____
loss.backward()
optimizer.step()