针对毕火炬闪电中的二值分类问题,提出了一种分段神经网络模型。为了实现这一点,我使用了BCEWithLogitsLoss。我的真实和预测的形状分别是(BZ,640,256),它们的内容分别是(0,1) 0,1。
现在,我正在尝试从火炬度量中用F1计算我的验证数据集中批量数据的F1Score分数,然后用Pytroch闪电的log_dict进行累积
from torchmetrics import F1Score
self.f1 = F1Score(num_classes=2)我的验证步骤如下所示:
def validation_step(self, batch, batch_idx):
t0, t1, mask_gt = batch
mask_pred = self.forward(t0, t1)
mask_pred = torch.sigmoid(mask_pred).squeeze()
mask_pred = torch.where(mask_pred > 0.5, 1, 0)
f1_score_ = self.f1(mask_pred, mask_gt)
metrics = {
'val_f1_score': f1_score_,
}
self.log_dict(metrics, on_epoch=True)这给了我在每个时代结束时(甚至在培训开始前进行的心智验证检查)的高得离谱的F1分数,~0.99,这让我认为我没有以正确的方式使用F1Score和log_dict。我尝试了几个论点(https://github.com/PyTorchLightning/metrics/blob/master/torchmetrics/classification/f_beta.py#L181-L310)却没有结果。我做错了什么?
发布于 2022-02-20 17:58:49
事实证明,我有一个非常不平衡的数据集,其中"False“类被过度表示,是"True”类的40倍。该模型能很好地检测“假”类,因此通过取两个类的宏F1平均值(每个类的权重相等)来掩盖检测“真”类的问题。
https://stackoverflow.com/questions/71176911
复制相似问题