首页 文章

从tensorflow获得top-k预测

提问于
浏览
0

我在机器学习方面比较新,特别是在实现算法方面 . 我正在使用python和tensorflow库来实现一个神经网络来训练一个有大约20个类的数据集 . 我能够成功地训练和预测,但我有一个问题,

使用张量流而不仅仅是单个预测,是否有可能获得前k个类及其概率?

如果可能的话怎么办呢?谢谢你的指导 .

Update 01: 我正在添加我正在做的代码 . 因此,我 Build 了一个神经网络,其中3层分别具有tanh,sigmoid和sigmoid作为隐藏层的激活函数和输出层的softmax . 培训和预测的代码如下:

y_pred = None
    with tf.Session() as sess:
        sess.run(init)
        for epoch in range(training_epochs):            
            # running the training_epoch numbered epoch
            _,cost = sess.run([optimizer,cost_function],feed_dict={X:tr_features,Y:tr_labels})
            cost_history = np.append(cost_history,cost)
        # predict results based on the trained model
        y_pred = sess.run(tf.argmax(y_,1),feed_dict={X: ts_features})

现在y_pred是ts_features的每个测试示例的类标签列表 . 但是,我没有为每个测试示例获得1个单一类别标签,而是希望每个示例都能获得每个k-predictions的top-k预测,并伴有某种概率 .

1 回答

  • 3

    使用tf.nn.top_k()

    top_k_values, top_k_indices = tf.nn.top_k(predictions, k=k)
    

    如果 predictions 是每个类的概率向量(即 predictions[i] = prediction probability for class i ),则 top_k_values 将包含 predictions 中的 k 最高概率, top_k_indices 将包含这些概率的索引,即相应的类 .


    假设在您的代码中, y_ 是每个类的预测概率的向量:

    k = 3  # replace with your value
    # Instead of `y_pred`:
    y_k_probs, y_k_pred = sess.run(
        tf.nn.top_k(y_, k=k), feed_dict={X: ts_features})
    

相关问题