如何解决tf.nn.in_top_k给出错误,我不知道为什么:NotFoundError:找不到节点的有效设备节点:{{node InTopKV2}}
我试图理解top k分类准确度的含义,因此我查看了源代码,发现使用nn.in_top_k。 我尝试尝试使用此功能,但仅收到错误消息:
NotFoundError: Could not find valid device for node.
Node:{{node InTopKV2}}
All kernels registered for op InTopKV2 :
device='XLA_GPU'; T in [DT_INT32,DT_INT64]
device='XLA_CPU'; T in [DT_INT32,DT_INT64]
device='XLA_GPU_JIT'; T in [DT_INT32,DT_INT64]
device='GPU'; T in [DT_INT64]
device='GPU'; T in [DT_INT32]
device='XLA_CPU_JIT'; T in [DT_INT32,DT_INT64]
device='CPU'; T in [DT_INT64]
device='CPU'; T in [DT_INT32]
[Op:InTopKV2]
我的原始代码产生了此错误:
import tensorflow as tf
from tensorflow import nn
y_true = [[0,1],[0,1,0]]
y_pred = [[0.1,0.9,0.8],[0.05,0.95,0]]
y_pred=tf.convert_to_tensor(y_pred,dtype=tf.float32)
y_true = tf.convert_to_tensor([2,dtype=tf.int32)
print(nn.in_top_k(y_pred,y_true,k=3))
我用google搜索,可能是输入数据类型问题,但是我也根据website设置了float32和int32类型,所以我认为它们应该是正确的。为什么会这样?
解决方法
我能够使用以下代码在Tensorflow版本2.x中重现错误
import tensorflow as tf
print(tf.__version__)
from tensorflow import nn
y_true = [[0,1],[0,1,0]]
y_pred = [[0.1,0.9,0.8],[0.05,0.95,0]]
y_pred=tf.convert_to_tensor(y_pred,dtype=tf.float32)
y_true = tf.convert_to_tensor([2,dtype=tf.int32)
out=nn.in_top_k(y_pred,y_true,k=3)
输出:
2.1.0
---------------------------------------------------------------------------
NotFoundError Traceback (most recent call last)
<ipython-input-3-7ecc0c53e0ee> in <module>()
10 y_true = tf.convert_to_tensor([2,dtype=tf.int32)
11
---> 12 out=nn.in_top_k(y_pred,k=3)
4 frames
/usr/local/lib/python3.6/dist-packages/six.py in raise_from(value,from_value)
NotFoundError: Could not find valid device for node.
Node:{{node InTopKV2}}
All kernels registered for op InTopKV2 :
device='XLA_GPU'; T in [DT_INT32,DT_INT64]
device='XLA_CPU'; T in [DT_INT32,DT_INT64]
device='XLA_CPU_JIT'; T in [DT_INT32,DT_INT64]
device='XLA_GPU_JIT'; T in [DT_INT32,DT_INT64]
device='CPU'; T in [DT_INT64]
device='CPU'; T in [DT_INT32]
device='GPU'; T in [DT_INT64]
device='GPU'; T in [DT_INT32]
[Op:InTopKV2]
要解决此错误,您必须移动in_top_k
中的参数位置。请参考下面的工作代码
import tensorflow as tf
print(tf.__version__)
from tensorflow import nn
y_true = [[0,dtype=tf.int32)
print(nn.in_top_k(y_true,y_pred,k=3))
输出:
2.1.0
tf.Tensor([ True True],shape=(2,),dtype=bool)
要在TF 2.3.0中完成当前任务,可以使用tf.math.in_top_k
print(tf.math.in_top_k(y_true,k=3)) # tf.Tensor([ True True],dtype=bool)
您可以参考此here
的源代码版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。