-
Notifications
You must be signed in to change notification settings - Fork 19.6k
Closed
Labels
stat:contributions welcomeA pull request to fix this issue would be welcome.A pull request to fix this issue would be welcome.type:featureThe user is asking for a new feature.The user is asking for a new feature.
Description
I'm curious why there is no ops.ifft2. Given that there is already fft and fft2, implementing one is trivial.
Here is an example of what an ifft2 would look like:
import keras
def keras_ops_ifft2(fft_real,fft_imag):
"""
Inputs are real and imaginary parts of array
of shape [...,H,W],[...,H,W] , where the last two
dimensions correspond tot he image dimensions
Returns tuple containing the real and imaginary parts
of the ifft2
Test:
from keras import ops
X = np.random.rand( 1,1,11,11 ).astype(np.float32)
X_real,X_imag = ops.real(X), ops.imag(X)
X_fft_real,X_fft_imag = keras.ops.fft2((X_real,X_imag))
X_recon,_ = keras_ops_ifft2(X_fft_real,X_fft_imag)
np.allclose(X,X_recon,atol=1e-6)
"""
H = ops.cast(ops.shape(fft_real)[-2],'float32') # height
W = ops.cast(ops.shape(fft_real)[-1],'float32') # width
# Conjugate the input
real_conj, imag_conj = fft_real, -fft_imag
# Compute FFT of conjugate
fft = ops.fft2((real_conj, imag_conj))
return fft[0] / (H*W), -fft[1] / (H*W)Metadata
Metadata
Assignees
Labels
stat:contributions welcomeA pull request to fix this issue would be welcome.A pull request to fix this issue would be welcome.type:featureThe user is asking for a new feature.The user is asking for a new feature.