【报错】AttributeError: ‘float‘ object has no attribute ‘backward‘

完整报错

Traceback (most recent call last):
  File "D:\360MoveData\Users\HONOR\whu\segment.py", line 422, in 
    save_dir='./models'
  File "D:\360MoveData\Users\HONOR\whu\segment.py", line 269, in train_model
    result['loss'].backward()
AttributeError: 'float' object has no attribute 'backward'

Process finished with exit code 1

原因分析

该报错说明在调用 .backward() 时,传入的对象是一个 Python 的 float 类型,而不是一个 PyTorch 张量(Tensor)

回溯代码,可以看到result来自于函数evaluate_batch

result = evaluate_batch(...)
result['loss'].backward()

再查看evaluate_batch的返回值,可以发现loss用了 .item()转为了float,不再是一个tensor张量

    return {
        'loss': loss.item(),
        'dice': loss_dice.item(),
        'iou': iou_score(pred_masks.float(), masks.float()).item(),
        'pred_masks': pred_masks,
        'seg_maps': seg_maps
    }

解决办法

去掉 .item()

    return {
        'loss': loss,
        'dice': loss_dice,
        'iou': iou_score(pred_masks.float(), masks.float()).item(),
        'pred_masks': pred_masks,
        'seg_maps': seg_maps
    }

你可能感兴趣的:(读研日记,机器学习,深度学习,人工智能)