การกำหนดค่าเริ่มต้นและฟังก์ชัน Activation
ปัญหา Unstable Gradient (ทั้งแบบ Vanishing และ Exploding) เป็นความท้าทายที่พบบ่อยในการเทรน Neural Network เชิงลึก ในแบบฝึกหัดนี้และแบบฝึกหัดถัดไป จะได้ขยายสถาปัตยกรรมโมเดลที่สร้างไว้สำหรับงานจำแนกประเภทความสะอาดของน้ำ เพื่อให้รับมือกับปัญหาดังกล่าวได้ดียิ่งขึ้น
ในขั้นแรก จะปรับปรุงการกำหนดค่าเริ่มต้นของน้ำหนักโดยใช้กลยุทธ์ He (Kaiming) Initialization โดยต้องเรียกใช้ Initializer ที่เหมาะสมจากโมดูล torch.nn.init ซึ่ง import มาให้แล้วในชื่อ init จากนั้นจะอัปเดตฟังก์ชัน Activation จาก ReLU ค่าเริ่มต้นไปเป็น ELU ที่มักให้ผลลัพธ์ที่ดีกว่า
แบบฝึกหัดนี้เป็นส่วนหนึ่งของหลักสูตร
Deep Learning ระดับกลางด้วย PyTorch
คำแนะนำการฝึกหัด
- เรียกใช้ He (Kaiming) Initializer กับแอตทริบิวต์ weight ของเลเยอร์ที่สอง
fc2ในลักษณะเดียวกับที่ทำกับfc1 - เรียกใช้ He (Kaiming) Initializer กับแอตทริบิวต์ weight ของเลเยอร์ที่สาม
fc3โดยคำนึงถึงฟังก์ชัน Activation ที่แตกต่างกันในเลเยอร์สุดท้าย - อัปเดตฟังก์ชัน Activation ในเมธอด
forward()จากreluเป็นelu
แบบฝึกหัดเชิงโต้ตอบแบบลงมือทำ
ลองทำแบบฝึกหัดนี้โดยเติมโค้ดตัวอย่างนี้ให้สมบูรณ์
class Net(nn.Module):
def __init__(self):
super().__init__()
self.fc1 = nn.Linear(9, 16)
self.fc2 = nn.Linear(16, 8)
self.fc3 = nn.Linear(8, 1)
# Apply He initialization
init.kaiming_uniform_(self.fc1.weight)
____(____)
____(____, ____)
def forward(self, x):
# Update ReLU activation to ELU
x = nn.functional.relu(self.fc1(x))
x = nn.functional.relu(self.fc2(x))
x = nn.functional.sigmoid(self.fc3(x))
return x