列表类型y_hat无法转numpy数组,且无法调用.cpu()问题求助
问题分析与解决
报错的核心原因是:y_hat是list类型,而非单个PyTorch张量,你不能直接对整个list调用.cpu()方法——.cpu()是PyTorch张量的专属方法,list本身没有这个属性。而list内部的每个元素都是存放在CUDA设备上的张量,直接转numpy就会触发类型错误。
解决步骤
你需要遍历list中的每个张量,先将其转移到CPU内存,再转换为numpy数组,具体代码如下:
方法1:逐个处理后转numpy数组
import numpy as np # 遍历list,把每个CUDA张量转到CPU并转numpy y_hat_np = np.array([tensor.cpu().numpy() for tensor in y_hat])
方法2:先转成CPU张量再统一转numpy(适用于所有张量形状一致的情况)
import torch import numpy as np # 先把list堆叠成一个CPU上的张量,再转numpy y_hat_cpu_tensor = torch.stack(y_hat).cpu() y_hat_np = y_hat_cpu_tensor.numpy()
如果你的list里的张量是标量,方法1会生成一维numpy数组;如果是多维张量且形状统一,方法2会生成更高维度的数组,可根据需求选择。
内容的提问来源于stack exchange,提问作者MsA
相关产品推荐
相关产品推荐

