急切执行-InternalError:找不到节点名称为“ Sqrt”的有效设备

时间:2018-08-14 17:16:17

标签: tensorflow

启用紧急执行后,TensorFlow平方根函数tf.sqrt()会产生InternalError

import tensorflow as tf

# enable eager execution
tf.enable_eager_execution()

> tf.pow(2,4)
'Out': <tf.Tensor: id=48, shape=(), dtype=int32, numpy=16>

> tf.sqrt(4)

>>> Traceback (most recent call last):

  File "<ipython-input-21-5dc8e2f4780c>", line 1, in <module>
    tf.sqrt(4)

  File "/Users/ekababisong/anaconda3/envs/py36_dl/lib/python3.6/site-packages/
     tensorflow/python/ops/math_ops.py", line 365, in sqrt
         return gen_math_ops.sqrt(x, name=name)

  File "/Users/ekababisong/anaconda3/envs/py36_dl/lib/python3.6/site-packages/
     tensorflow/python/ops/gen_math_ops.py", line 7795, in sqrt
        _six.raise_from(_core._status_to_exception(e.code, message), None)

  File "<string>", line 3, in raise_from

InternalError: Could not find valid device for node name: "Sqrt"
op: "Sqrt"
input: "dummy_input"
attr {
  key: "T"
  value {
    type: DT_INT32
  }
}
 [Op:Sqrt] name: Sqrt/

4 个答案:

答案 0 :(得分:2)

当尝试通过卷积滤波器传递图像时,我遇到了类似的错误。事实证明,正如P-Gn所说的,只需将其转换为浮点数即可解决。

<Rectangle x:Name="rect" Fill="Red" Width="{Binding SizeInt*}"/>

答案 1 :(得分:1)

在这种情况下,值只是 int ,仅使用 numpy 可能是个好主意。

如果您仍然想使用TensorFlow,可以这样做:

tf.math.sqrt(tf.convert_to_tensor(4, dtype='float32'))

tf.sqrt(tf.convert_to_tensor(4, dtype='float32'))

TensorFlow 2

上进行了测试

答案 2 :(得分:0)

尝试在字典中查找Nan值时遇到类似的错误,P-Gn的解决方案起作用。

TF2.0 RC, 之前(内部错误:找不到节点的有效设备):

any(tf.math.is_nan(val) for val in dict.values())

之后:

any(tf.math.is_nan(tf.cast(val, tf.float32) for val in dict.values())

返回true / false

答案 3 :(得分:-1)

x = tf.cast(x, tf.float32)

希望有帮助。