tf.signal.ifft2d` / `tf.signal.irfft` produce different CPU vs GPU NaN propagation for small `complex64` inputs containing `Inf
Les mainteneurs répondent en général sous 2 jours
@Kayyuri y travaille déjà.
Depuis le 13/10/2026.
Évaluation
Cette issue n'a pas encore été évaluée.
Description
Issue type
Bug
Have you reproduced the bug with TensorFlow Nightly?
Yes
Source
source
TensorFlow version
2.20.0
Custom code
Yes
OS platform and distribution
No response
Mobile device
No response
Python version
3.11.14
Bazel version
No response
GCC/compiler version
No response
CUDA/cuDNN version
No response
GPU model and memory
No response
Current behavior?
For small complex64 FFT inputs containing Inf, TensorFlow CPU and GPU produce different NaN propagation patterns.
Two examples are stable in three isolated runs:
tf.signal.ifft2d([[inf+0j, 1+0j], [2+0j, 3+0j]])- CPU imaginary components are finite zeros.
- GPU imaginary components are all
NaN. - NumPy matches the TensorFlow CPU pattern.
tf.signal.irfft([1+2j, inf+0j, -4+0j])- CPU returns
[inf, 1.25, -inf, 1.25]. - GPU returns
[inf, nan, -inf, nan]. - NumPy matches the TensorFlow CPU pattern.
- CPU returns
A stronger non-finite control, tf.signal.irfft([1+2j, inf-3j, -4+infj]), returns all NaN on CPU, GPU, and NumPy, so the issue is not that all non-finite FFT outputs are being flagged as wrong.
Expected behavior
If TensorFlow considers CPU and GPU FFT non-finite propagation to have the same semantic contract, these small inputs should produce consistent NaN/Inf patterns across devices.
If backend-specific non-finite propagation is expected for FFT kernels, it would be helpful for the documentation or error notes to make that explicit. I am filing this as a CPU/GPU consistency issue rather than a strict finite-value correctness claim.
Standalone code to reproduce the issue
import numpy as np
import tensorflow as tf
print("TensorFlow:", tf.__version__)
print("GPUs:", tf.config.list_physical_devices("GPU"))
def run(device):
with tf.device(device):
a = tf.constant(
np.array(
[[np.inf + 0j, 1 + 0j], [2 + 0j, 3 + 0j]],
dtype=np.complex64,
)
)
b = tf.constant(
np.array([1 + 2j, np.inf + 0j, -4 + 0j], dtype=np.complex64)
)
c = tf.constant(
np.array([1 + 2j, np.inf - 3j, -4 + np.inf * 1j], dtype=np.complex64)
)
return {
"ifft2d": tf.signal.ifft2d(a).numpy(),
"irfft": tf.signal.irfft(b).numpy(),
"irfft_control": tf.signal.irfft(c).numpy(),
}
cpu = run("/CPU:0")
gpu = run("/GPU:0")
np_ifft2d = np.fft.ifft2(
np.array([[np.inf + 0j, 1 + 0j], [2 + 0j, 3 + 0j]], dtype=np.complex64)
)
np_irfft = np.fft.irfft(
np.array([1 + 2j, np.inf + 0j, -4 + 0j], dtype=np.complex64)
)
np_control = np.fft.irfft(
np.array([1 + 2j, np.inf - 3j, -4 + np.inf * 1j], dtype=np.complex64)
)
for name in ["ifft2d", "irfft", "irfft_control"]:
print("\n", name)
print("CPU:", cpu[name])
print("GPU:", gpu[name])
print("\nNumPy ifft2d:", np_ifft2d)
print("NumPy irfft:", np_irfft)
print("NumPy control:", np_control)
Relevant log output
TensorFlow: 2.20.0
ifft2d
CPU: [[inf+0.j inf+0.j]
[inf+0.j inf+0.j]]
GPU: [[inf+nanj inf+nanj]
[inf+nanj inf+nanj]]
irfft
CPU: [ inf 1.25 -inf 1.25]
GPU: [ inf nan -inf nan]
irfft_control
CPU: [nan nan nan nan]
GPU: [nan nan nan nan]
NumPy ifft2d: [[inf+0.j inf+0.j]
[inf+0.j inf+0.j]]
NumPy irfft: [ inf 1.25 -inf 1.25]
NumPy control: [nan nan nan nan]
- Langage dominant
- C++
- Étoiles
- 201k
- Forks
- 78.4k
- Merge moyen
- 3 j 2 h
- PR mergées (30 j)
- 452
Préparer son environnement
- Aucun Dockerfile ni fichier Docker Compose
- Aucun modèle de pull request
- Lire le guide de contribution
Par où commencer
- Lisez l'issue en entier, puis le guide de contribution du projet.
- Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
- Forkez le dépôt et travaillez sur une branche.
- Ouvrez une pull request qui référence le numéro de l'issue.
Autres issues de tensorflow/tensorflow
-
tf.image.adjust_hue and tf.image.adjust_saturation have no gradient: LookupError under tf.function, silent None in eagerPeut-être pris @Venkat6871 l’a pris aujourd’hui. Ouvertetype:bug
tensorflow/tensorflow#130207 · 1 commentaire · 1 personne assignée ·
Les mainteneurs répondent en général sous 2 jours
-
tf.image.hsv_to_rgb has no gradient: registered NotDifferentiable, tf.GradientTape returns NonePeut-être pris @Venkat6871 l’a pris aujourd’hui. Ouvertetype:bug
tensorflow/tensorflow#130205 · 1 commentaire · 1 personne assignée ·
Les mainteneurs répondent en général sous 2 jours
-
tf.linalg.norm rejects NumPy integer axes (np.int64), while Python ints and np.linalg.norm workPeut-être pris @Venkat6871 l’a pris il y a 1 jour. Ouverte2.21.0 awaiting PR merge comp:ops type:bug
tensorflow/tensorflow#130195 · 1 personne assignée ·
Les mainteneurs répondent en général sous 2 jours
-
[docs] tf.nn.avg_pool2d / max_pool2d / max_pool_with_argmax: a length-4 `ksize`/`strides` with a non-1 batch entry is rejected ("Pooling is not yet supported on the batch dimension"), which the docs do not mentionPeut-être pris @Venkat6871 l’a pris il y a 1 jour. Ouverte2.21.0 awaiting PR merge comp:ops type:docs-bug
tensorflow/tensorflow#130189 · 1 personne assignée ·
Les mainteneurs répondent en général sous 2 jours
-
tf.nn.sampled_softmax_loss and tf.nn.nce_loss fail for float16, bfloat16 and float64 inputsPeut-être pris @Venkat6871 l’a pris il y a 1 jour. Ouverte2.21.0 awaiting PR merge comp:ops type:bug
tensorflow/tensorflow#130178 · 1 personne assignée ·
Les mainteneurs répondent en général sous 2 jours
Toutes les issues de tensorflow/tensorflow
Issues similaires
-
Bug Translations
Difficulté 1/5 1-3 heures Accessibilité débutants 82/100
wesnoth/wesnoth#11728 · 1 commentaire ·
Les mainteneurs répondent en général sous 1 jour
-
Difficulté 2/5 1-3 heures Accessibilité débutants 66/100
rpm-software-management/dnf5#3043 ·
Les mainteneurs répondent en général sous 3 jours
-
can't see cursor under wayfireOuvertebug
Difficulté 2/5 1-3 heures Accessibilité débutants 76/100
Les mainteneurs répondent en général sous 3 jours
-
test(tools): two testkit cache tests fail unless GOCACHE and GOMODCACHE are in the environmentOuvertebacklog
Difficulté 2/5 1-3 heures Accessibilité débutants 78/100
EchoTools/nevr-runtime#2385 ·
Les mainteneurs répondent en général sous 1 jour
-
needs-triage
Difficulté 2/5 1-3 heures Accessibilité débutants 82/100
AustinKelsay/dnd-diceroll#200 ·
Les mainteneurs répondent en général sous 1 jour