代码之家  ›  专栏  ›  技术社区  ›  user836026

在pytorch中使用超过1公制

  •  0
  • user836026  · 技术社区  · 3 年前

    我在Tenserflow方面有一些经验,但我对pytorch还是新手。有时我需要不止一个指标来检查训练的准确性。在Tenserflow中,我经常这样做,如下所示。但我想知道怎么能在pytorch中列出超过1个度量。

    LR = 0.0001
    optim = keras.optimizers.Adam(LR)
    
    dice_loss_se2 = sm.losses.DiceLoss()
    mae = tf.keras.losses.MeanAbsoluteError( )
    metrics = [ mae,sm.metrics.IOUScore(threshold=0.5), sm.metrics.FScore(threshold=0.5) , dice_loss_se2]
    
    model.compile(optimizer=optim,loss= dice_loss_se2,metrics= metrics)
    
    1 回复  |  直到 3 年前
        1
  •  1
  •   Edwin Cheong    3 年前

    在pytorch中,培训主要通过循环完成,因此您必须通过每个步骤定义,有torchmetrics之类的包,您可以运行每个度量,以下是一个示例:

    import torchmetrics
    
    for step, (test_image, test_labels) in tqdm(enumerate(test_dataloader), total=len(test_dataloader)):
            test_batch_image = test_image.to('cuda')
            test_batch_label = test_labels.to('cuda')
            targets.append(test_labels)
            
            with torch.no_grad():
                logits = model(test_batch_image)
            
            loss = criterion(logits, test_batch_label)
            test_loss += loss.item()
            
            preds.append(logits.detach().cpu().numpy().argmax(axis=1))
        
        preds = torch.tensor(np.concatenate(preds))
        targets = torch.tensor(np.concatenate(targets))
        print('[Epoch %d] Test loss: %.3f' %(epoch + 1, test_loss/ len(test_dataloader)))
        print('Accuracy: {}%'.format(round(torchmetrics.functional.accuracy(target=targets, preds=preds).item() * 100), 2))