tf.signal.ifft2d` / `tf.signal.irfft` produce different CPU vs GPU NaN propagation for small `complex64` inputs containing `Inf
维护者通常 2 天内回复
@Kayyuri 已经在做这个了。
开始于 2026年10月13日。
评估
这个 Issue 还没有评估数据。
描述
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]
- 主要语言
- C++
- 星标
- 201k
- 派生
- 78.4k
- 平均合并
- 3 天 2 小时
- 30 天内合并 PR
- 452
环境准备
- 没有 Dockerfile 或 Docker Compose 文件
- 没有 Pull Request 模板
- 阅读贡献指南
从这里开始
- 先读完整个 Issue,再读项目的贡献指南。
- 在 Issue 下留言说明你要接手 —— 这能避免两个人做同样的事。
- Fork 仓库,在一个分支上完成修改。
- 提交 Pull Request,并在描述里引用这个 Issue 编号。
tensorflow/tensorflow 的其他 Issue
-
tf.image.adjust_hue and tf.image.adjust_saturation have no gradient: LookupError under tf.function, silent None in eager可能已有人在做 @Venkat6871 今天认领。 未关闭type:bug
tensorflow/tensorflow#130207 · 1 条评论 · 已指派 1 人 ·
维护者通常 2 天内回复
-
tf.image.hsv_to_rgb has no gradient: registered NotDifferentiable, tf.GradientTape returns None可能已有人在做 @Venkat6871 今天认领。 未关闭type:bug
tensorflow/tensorflow#130205 · 1 条评论 · 已指派 1 人 ·
维护者通常 2 天内回复
-
tf.linalg.norm rejects NumPy integer axes (np.int64), while Python ints and np.linalg.norm work可能已有人在做 @Venkat6871 于 1 天前认领。 未关闭2.21.0 awaiting PR merge comp:ops type:bug
tensorflow/tensorflow#130195 · 已指派 1 人 ·
维护者通常 2 天内回复
-
[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 mention可能已有人在做 @Venkat6871 于 1 天前认领。 未关闭2.21.0 awaiting PR merge comp:ops type:docs-bug
tensorflow/tensorflow#130189 · 已指派 1 人 ·
维护者通常 2 天内回复
-
tf.nn.sampled_softmax_loss and tf.nn.nce_loss fail for float16, bfloat16 and float64 inputs可能已有人在做 @Venkat6871 于 1 天前认领。 未关闭2.21.0 awaiting PR merge comp:ops type:bug
tensorflow/tensorflow#130178 · 已指派 1 人 ·
维护者通常 2 天内回复
查看 tensorflow/tensorflow 的全部 Issue
相似的 Issue
-
Bug Translations
难度 1/5 1-3 小时 新手友好度 82/100
wesnoth/wesnoth#11728 · 1 条评论 ·
维护者通常 1 天内回复
-
难度 2/5 1-3 小时 新手友好度 66/100
rpm-software-management/dnf5#3043 ·
维护者通常 3 天内回复
-
bug
难度 2/5 1-3 小时 新手友好度 76/100
维护者通常 3 天内回复
-
backlog
难度 2/5 1-3 小时 新手友好度 78/100
EchoTools/nevr-runtime#2385 ·
维护者通常 1 天内回复
-
type:bug
难度 2/5 1-3 小时 新手友好度 65/100
tensorflow/tflite-micro#3995 ·
维护者通常 1 天内回复