2

以下函数基本上返回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.
4

2 回答 2

0

使用torch.as_tensor代替torch.load,您将不必创建缓冲区。

看到这个问题这个答案

如果您希望 pytorch 张量成为您的 numpy 数组的副本,请使用torch.tensor(arr). 如果您希望 torch.Tensor 共享相同的内存缓冲区,请使用torch.as_tensor(arr). 如果可以的话,PyTorch 将重用缓冲区。

如果你真的想从你的 numpy 数组中创建一个缓冲区,请使用 io 中的 BytesIO 类并用arr.tobytes()like初始化它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 生成的字节流。祝你好运。

于 2019-03-12T03:49:15.927 回答
-1

正如文档所说,torch.load

从文件中加载使用 torch.save() 保存的对象。

要转换numpy.ndarraytorch.Tensor您要使用torch.from_numpy的,清楚地记录为

从 numpy.ndarray 创建一个张量。

于 2019-01-06T09:45:28.967 回答