tensorflow 当axis =[]且x为复数时,tf.nn.weighted_moments输出NaN

ubby3x7f  于 2022-10-29  发布在  其他
关注(0)|答案(3)|浏览(149)

系统信息

  • 我是否编写了自定义代码(而不是使用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)>)
kzipqqlq

kzipqqlq1#

使用TF v2.1、TF v2.4和TF-nightly(2.5.0-dev20210204)可以重现此问题。请查找要点here。谢谢!

igsr9ssn

igsr9ssn2#

问题在TF 2.6中仍然存在,请查找要点here。谢谢!

m4pnthwp

m4pnthwp3#

感谢您提交此问题。
x 值乘以大 frequency_weights,结果大于约3.4e+38,导致float32表示中溢出(由np.complex64使用)。作为适合避免这种溢出的情况的解决方法,调用者可以将frequency_weights归一化为具有较小的值(例如通过使用浮点类型并除以最大值以使得规格化结果的最大值为1.0)。然而,没有通用的方法来重新调整权重,而不与有效的用例冲突(例如,对于小值不会下溢)。2因此,我们决定不改变行为。

相关问题