PyTorch张量转Numpy循环报错:.cpu()与.detach().numpy()冲突
PyTorch张量转Numpy数组问题解决方法
你的问题出在张量同时处于CUDA设备且带有梯度信息,numpy仅支持处理CPU上的无梯度张量,单独使用.detach()或.cpu()都无法满足要求,必须结合两者。
正确转换步骤
先切断张量的梯度关联(.detach()),再将张量转移到CPU(.cpu()),最后调用.numpy()完成转换。两个操作顺序可互换,效果一致。
修改后的代码行
grieve_factor = th.tanh(th.clamp(avg_score / avg_q, min=0)).detach().cpu().numpy()
错误原因说明
- 仅用
.detach():张量仍在CUDA设备上,numpy无法读取GPU内存中的数据,因此提示需用.cpu() - 仅用
.cpu():张量仍保留梯度计算图关联,numpy不允许从带梯度的张量直接转换,因此提示需用.detach()
内容的提问来源于stack exchange,提问作者Alex
相关产品推荐
相关产品推荐

