【发布时间】:2020-02-11 03:27:12
【问题描述】:
u-net 架构中有一个著名的技巧是使用自定义权重图来提高准确性。以下是它的详细信息:
现在,通过在这里和其他多个地方询问,我了解了两种方法。我想知道哪个是正确的,或者还有其他更正确的方法吗?
-
首先是在训练循环中使用
torch.nn.Functional方法:loss = torch.nn.functional.cross_entropy(output, target, w)其中 w 将是计算出的自定义重量。 -
二是在训练循环外调用损失函数时使用
reduction='none'criterion = torch.nn.CrossEntropy(reduction='none')然后在训练循环中乘以自定义权重:
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
现在,我有点困惑哪一个是对的,还是有其他方法,或者两者都是对的?
【问题讨论】:
标签: python pytorch image-segmentation semantic-segmentation