系统信息
- 我是否编写了自定义代码(而不是使用TensorFlow中提供的常用示例脚本):没有
- 操作系统平台和分发版(例如Linux Ubuntu 16.04):Linux操作系统Ubuntu 18.04
- 移动的设备(例如iPhone 8、Pixel 2、Samsung Galaxy),如果问题发生在移动设备上:不适用
- TensorFlow安装自(源代码或二进制文件):二进制的
- TensorFlow版本(使用下面的命令):2.1.0
- Python版本:3.7.6
- Bazel版本(如果从源代码编译):不适用
- GCC/编译器版本(如果从源代码编译):不适用
- CUDA/cuDNN版本:不适用
- GPU型号和内存:不适用
描述当前行为
当axes=[]
和x
为复数时,tf.nn.weighted_moments
输出NaN
描述预期行为
输出中不应有Nan
重现问题的独立代码
import tensorflow as tf
import numpy as np
tf.nn.weighted_moments(x=np.array([1e+38+0.j, 2e+38+0.j], dtype=np.complex64), frequency_weights=10, axes=[])
输出量:
(<tf.Tensor: shape=(2,), dtype=complex64, numpy=array([inf+nanj, inf+nanj], dtype=complex64)>, <tf.Tensor: shape=(2,), dtype=complex64, numpy=array([inf+nanj, inf+nanj], dtype=complex64)>)
3条答案
按热度按时间kzipqqlq1#
使用TF v2.1、TF v2.4和TF-nightly(
2.5.0-dev20210204
)可以重现此问题。请查找要点here。谢谢!igsr9ssn2#
问题在TF 2.6中仍然存在,请查找要点here。谢谢!
m4pnthwp3#
感谢您提交此问题。
大 x 值乘以大 frequency_weights,结果大于约3.4e+38,导致float32表示中溢出(由np.complex64使用)。作为适合避免这种溢出的情况的解决方法,调用者可以将frequency_weights归一化为具有较小的值(例如通过使用浮点类型并除以最大值以使得规格化结果的最大值为1.0)。然而,没有通用的方法来重新调整权重,而不与有效的用例冲突(例如,对于小值不会下溢)。2因此,我们决定不改变行为。