以下函数基本上返回numpy.ndarray
def getimage(id):
img = self.coco.loadImgs(id)
I = io.imread(img['coco_url'])
return I #returns 'numpy.ndarray'
从main调用getimage函数:
x = load.getimage(id).
x = torch.load(x)
抛出错误:
'numpy.ndarray' object has no attribute 'seek'. You can only torch.load from a file that is seekable. Please pre-load the data into a buffer like io.BytesIO and try to load from it instead.
正如docs所说,torch.load
从文件加载用torch.save()保存的对象。
要将numpy.ndarray
转换为torch.Tensor
,您需要使用torch.from_numpy
,清楚地记录为
从numpy.ndarray创建一个Tensor。
使用torch.as_tensor
而不是torch.load
,您将不必创建缓冲区。
如果你想让pytorch张量成为你的numpy数组的副本,请使用torch.tensor(arr)
。如果你想让torch.Tensor共享相同的内存缓冲区,那么使用torch.as_tensor(arr)
。如果可以,PyTorch将重用缓冲区。
如果你真的想从你的numpy数组中创建一个缓冲区,请使用io中的BytesIO类并使用arr.tobytes()
之类的stream = io.BytesIO(arr.tobytes())
进行初始化。但YMMV;我刚试过torch.load
和一个流对象,火炬抱怨:
import io
import numpy as np
a = np.array([3, 4, 5])
stream = io.BytesIO(a.tobytes()) # implements seek()
torch.load(stream)
---------------------------------------------------------------------------
UnpicklingError Traceback (most recent call last)
...
UnpicklingError: invalid load key, '\x03'.
如果你想让它工作,你可能必须调整numpy正在生成的字节流。祝好运。