Используйте torch.as_tensor
вместо torch.load
, и вам не нужно будет создавать буфер.
См. этот вопрос и этот ответ .
Если вы хотите, чтобы тензор pytorch был копией вашего массива, используйте torch.tensor(arr)
. Если вы хотите, чтобы torch.Tensor разделял тот же буфер памяти, используйте torch.as_tensor(arr)
. Затем PyTorch будет повторно использовать буфер, если сможет.
Если вы действительно хотите создать буфер из массива numpy, используйте класс BytesIO из io и инициализируйте его с 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. Удачи.