Python 报错 RuntimeError: Can't call numpy() on Tensor that requires grad. Use tensor.detach().numpy() instead

在使用 sklearn 计算回归模型的 R2 评分时,出现该报错

1
2
predictions = model(test_features)
r2 = r2_score(test_labels, predictions)

出现这个现象的原因是:待转换类型的 PyTorch Tensor 变量带有梯度,直接将其转换为 numpy 数据将破坏计算图,因此 numpy 拒绝进行数据转换,实际上这是对开发者的一种提醒。如果自己在转换数据时不需要保留梯度信息,可以在变量转换之前添加 detach() 调用。

解决办法:

1
2
3
4
5
predictions = model(test_features)
r2 = r2_score(test_labels.detach(), predictions.detach())

# 直接 predictions.numpy() 也会出现该报错
# 需要 predictions.detach().numpy()

参考:解决Python报错:RuntimeError: Can’t call numpy() on Variable that requires grad. Use var.detach().numpy()


Python 报错 RuntimeError: Can't call numpy() on Tensor that requires grad. Use tensor.detach().numpy() instead
https://wonderhoi.com/2024/10/11/Python-报错-RuntimeError-Can-t-call-numpy-on-Tensor-that-requires-grad-Use-tensor-detach-numpy-instead/
作者
wonderhoi
发布于
2024年10月11日
许可协议