Почему pyTorch "уничтожает" мои numpy массивы? - PullRequest
0 голосов
/ 11 апреля 2020

Я работаю с numpy тензорами формы (N, 2,128,128).

При попытке визуализировать их как изображения (я восстанавливаю через ifft2), numpy и pyTorch, кажется, смешивают вещи сумасшедшим образом ...

Я проверил с маленькими фиктивными массивами, и когда я передаю numpy ndarray факелу. FloatTensor значения одинаковы в тех же позициях (одинаковой формы!), но когда я пытаюсь сделать ifft2 для тензора факела, результат будет другим, чем для тензора без факела! Может ли кто-нибудь помочь мне разобраться в этом?

Небольшой воспроизводимый пример:

x=np.random.rand(3,2,2,2)
xTorch=torch.FloatTensor(x)

#visualize then in the interpreter, they are the same!
#
#now show the magnitude of an inverse fourier transform
plt.imshow(np.abs(np.fft.ifft2(xTorch[0,0,:,:]+1j*xTorch[0,1,:,:])))
plt.show()

plt.imshow(np.abs(np.fft.ifft2(x[0,0,:,:]+1j*x[0,1,:,:])))
plt.show()

#they are not the same ! What is the problem!?

Я обнаружил, что если я использую: torch.Tensor.cpu (xTorch) .detach () . numpy () Я могу получить тот же результат, но что это значит?!

PS Также обратите внимание, что я знаю, что правильная визуализация с x, а не с xTensor, так что кажется, что torch что-то меняется, когда я делаю ifft2 .. или когда я реконструирую 2 канала ... или, может быть, есть проблема / ошибка с комплексными числами ... Если вы посмотрите внутрь: np.abs(np.fft.ifft2(x[0,0,:,:]+1j*x[0,1,:,:])) и xTorch, значения настолько разные, что это не просто проблема с плавающей запятой, это что-то серьезное, но я не могу понять это, и это сводит меня с ума.

...