IOAITW選上選訓營了,打算練習一下歷屆。
IOAI 2025 Radar
他有給我範例程式碼,當然要跑跑看 或許跑下去就直接通過了
天下沒有白吃的午餐 跑出來的分數是 0.6
比想像中的好就是了
那下一步就是看看他的loss了

看起來很好啊 loss測試和訓練都在下降 沒有過擬合的跡象 而且loss很低
那為什麼分數只有0.6

原來是因為評分標準的差異
注意到預測對物件的分數極高
但是對背景的分數極低
所以要加權
weights = torch.tensor([1.0, 50.0, 50.0, 50.0, 50.0], device="cuda")
criterion = nn.CrossEntropyLoss(weight=weights)
# (可以理解成weights[label]會是該類別的權重)
加權之後分數就上去了

0.86 官解是 0.87
把num_epochs調高一點試試看 他baseline定義中預設num_epochs=100
但實際train卻用40而已
試試看100好了

哈 超過官解了

可以注意到loss在後期有鋸齒狀的波動
所以可能要動態調整學習率了(後期跨幅過大了)
import torch.optim as optim
from torch.optim.lr_scheduler import ReduceLROnPlateau
optimizer = optim.Adam(model.parameters(), lr=0.001)
# 2. 定義 ReduceLROnPlateau 排程器
scheduler = ReduceLROnPlateau(
optimizer,
mode='min', # 因為我們看的是 Loss,目標是讓它越「小」越好
factor=0.1, # 觸發時,新 LR = 舊 LR * 0.1 (直接縮小 10 倍)
patience=5 # 容忍度:如果連續 5 個 Epoch 驗證集 Loss 都沒有進步,就動手調整
)
# 然後把所有optimizer.step()的地方改成 scheduler.step(val_loss) 就好了

挺糟糕的看起來是梯度消失了
(反正已經超過官解了就不調整了 先放著吧)