【报错】AttributeError: ‘float‘ object has no attribute ‘backward‘
完整报错
Traceback (most recent call last):File "D:\360MoveData\Users\HONOR\whu\segment.py", line 422, in <module>save_dir='./models'File "D:\360MoveData\Users\HONOR\whu\segment.py", line 269, in train_modelresult['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}