Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/tensorflow/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
给我一个tensorflow';s tf.metrics.sparse\u平均值\u精度\u k_Tensorflow - Fatal编程技术网

给我一个tensorflow';s tf.metrics.sparse\u平均值\u精度\u k

给我一个tensorflow';s tf.metrics.sparse\u平均值\u精度\u k,tensorflow,Tensorflow,你能给我一个使用tf.metrics.sparse\u average\u precision\u at_k的代码示例吗?我在网上找不到任何东西…:( 如果我有这样一个多标签数据集(每个示例可能有多个目标标签): (课程总数=5) y1=[等级0,等级1] y2=[等级1,等级2] y3=[class_0] 我的系统预测: y1预测->[0.1,0.3,0.2,0.0,0.0] y2预测->[0.0,0.3,0.7,0.4,0.4] y3的预测->[0.1,0.3,0.2,0.3,0.5] 例如

你能给我一个使用
tf.metrics.sparse\u average\u precision\u at_k
的代码示例吗?我在网上找不到任何东西…:(

如果我有这样一个多标签数据集(每个示例可能有多个目标标签):

(课程总数=5)
y1=[等级0,等级1]
y2=[等级1,等级2]
y3=[class_0]

我的系统预测:

y1预测->[0.1,0.3,0.2,0.0,0.0]
y2预测->[0.0,0.3,0.7,0.4,0.4]
y3的预测->[0.1,0.3,0.2,0.3,0.5]

例如,我如何计算k=3

附言:如果你不能理解这个例子,请随意提出你自己的例子


编辑:到目前为止我的代码:
我真的不明白…请建议一个预测(仅y1)以及一次多个预测(每个预测中的真实类数不同)


tf.metrics.sparse\u average\u pred\u at_k
将替换为
tf.metrics.average\u precision\u at_k
。通过浏览中的代码,您会发现,当您的输入为
y\u true
y\u pred
时,此函数实际上将使用
y\u pred
转换为
y\u pred\u idx
top_k
功能

y\u true
是形状的张量(批次大小,数量标签),而
y\u pred
是形状的张量(批次大小,数量类别)

您还可以在本文中看到一些讨论,这个示例来自这个问题

import tensorflow as tf
import numpy as np

y_true = np.array([[2], [1], [0], [3], [0]]).astype(np.int64)
y_true = tf.identity(y_true)

y_pred = np.array([[0.1, 0.2, 0.6, 0.1],
                   [0.8, 0.05, 0.1, 0.05],
                   [0.3, 0.4, 0.1, 0.2],
                   [0.6, 0.25, 0.1, 0.05],
                   [0.1, 0.2, 0.6, 0.1]
                   ]).astype(np.float32)
y_pred = tf.identity(y_pred)

_, m_ap = tf.metrics.sparse_average_precision_at_k(y_true, y_pred, 3)

sess = tf.Session()
sess.run(tf.local_variables_initializer())

stream_vars = [i for i in tf.local_variables()]

tf_map = sess.run(m_ap)
print(tf_map)

print((sess.run(stream_vars)))

tmp_rank = tf.nn.top_k(y_pred,3)

print(sess.run(tmp_rank))
这一行
stream\u vars=[i for i in tf.local\u variables()]
帮助您查看在
tf.metrics.sparse\u average\u precision\u at_k
函数中创建的
两个局部变量

这一行
tmp\u rank=tf.nn.top\u k(y\u pred,3)
通过更改
k
的值来帮助您理解,该值是在
tf.metrics.sparse\u average\u precision\u k
中使用的预测索引

您可以更改
k
的值以查看不同的结果,
tmp\u秩
表示用于计算平均精度的索引

例如: 当
k=1
时,只有第一批与标签匹配,因此
在1
处的平均精度将为
1/6=0.1666666

k=2
时,第三批也将与标签匹配,因此
在2处的平均精度将是
(1+(1/2))/6=0.25

我总是得到类似的结果:tensorflow.python.framework.errors\u impl.failedPredicateError:尝试使用未初始化的值average\u precision\u在4处/5处/total[[Node:average_precision_at_4_5/total/read=Identity[T=DT_DOUBLE,_class=[“loc:@average_precision_at_4_5/total”],_device=“/job:localhost/replica:0/task:0/cpu:0”](average_precision_at_at_4_5/total)]]在tensorflow中使用变量之前,您需要初始化变量,并且度量在内部使用局部变量。在任何会话之前运行
tf.local\u variables\u initializer().Run()
。运行应该会起作用。我真的不明白……请建议一次预测(仅y1)以及同时进行多个预测(每个中的真实类数不同)-原始问题中的我的代码编辑。关于您的编辑,
tf.metrics.sparse\u average\u precision\u at_k
创建变量。当您在会话开始时运行
tf.local\u variables\u initializer
时,尚未生成任何局部变量。您需要在
sess.run(update)之前运行它
line,因为Tensorflow还不能进行时间旅行
metric, update = tf.metrics.sparse_average_precision_at_k(tf.stack(y1, y2, y3), tf.stack(p1, p2, p3), 3)
print session.run(update)
import tensorflow as tf
import numpy as np

y_true = np.array([[2], [1], [0], [3], [0]]).astype(np.int64)
y_true = tf.identity(y_true)

y_pred = np.array([[0.1, 0.2, 0.6, 0.1],
                   [0.8, 0.05, 0.1, 0.05],
                   [0.3, 0.4, 0.1, 0.2],
                   [0.6, 0.25, 0.1, 0.05],
                   [0.1, 0.2, 0.6, 0.1]
                   ]).astype(np.float32)
y_pred = tf.identity(y_pred)

_, m_ap = tf.metrics.sparse_average_precision_at_k(y_true, y_pred, 3)

sess = tf.Session()
sess.run(tf.local_variables_initializer())

stream_vars = [i for i in tf.local_variables()]

tf_map = sess.run(m_ap)
print(tf_map)

print((sess.run(stream_vars)))

tmp_rank = tf.nn.top_k(y_pred,3)

print(sess.run(tmp_rank))