Có một mẹo nổi tiếng trong kiến trúc u-net là sử dụng bản đồ trọng lượng tùy chỉnh để tăng độ chính xác. Dưới đây là các chi tiết của nó-
Bây giờ, bằng cách hỏi ở đây và tại nhiều nơi khác, tôi đã biết về 2 cách tiếp cận. Tôi muốn biết cách nào là đúng hoặc có cách tiếp cận nào khác đúng hơn không?
1) Đầu tiên là sử dụng torch.nn.Functional
phương pháp trong vòng huấn luyện-
loss = torch.nn.functional.cross_entropy(output, target, w)
Trong đó w sẽ là trọng lượng tùy chỉnh tính toán.
2) Thứ hai là sử dụng reduction='none'
chức năng gọi mất chức năng ngoài vòng huấn luyện
criterion = torch.nn.CrossEntropy(reduction='none')
và sau đó trong vòng đào tạo nhân với trọng số tùy chỉnh-
gt # Ground truth, format torch.long
pd # Network output
W # per-element weighting based on the distance map from UNet
loss = criterion(pd, gt)
loss = W*loss # Ensure that weights are scaled appropriately
loss = torch.sum(loss.flatten(start_dim=1), axis=0) # Sums the loss per image
loss = torch.mean(loss) # Average across a batch
Bây giờ, tôi hơi bối rối không biết cái nào đúng hay còn cách nào khác, hay cả hai đều đúng?