Я работаю с 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, значения настолько разные, что это не просто проблема с плавающей запятой, это что-то серьезное, но я не могу понять это, и это сводит меня с ума.