以下函数基本上返回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.
最佳答案
使用 torch.as_tensor
代替 torch.load
,您将不必创建缓冲区。
参见 this question和 this answer .
如果您希望 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
中的流对象和 torch 提示:
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 生成的字节流。祝你好运。
关于python - 如何将 numpy 数据预加载到像 io.BytesIO 这样的缓冲区中以使其可搜索?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54058716/