从张量流中获取前k个预测

Usa*_*far 1 python tensorflow

我在机器学习方面相对较新,尤其是在实现算法方面。我正在使用python和tensorflow库来实现神经网络,以对约20个类的数据集进行训练。我能够训练并成功获得预测,但是我有一个问题,

是否可以使用张量流而不是单个预测来获取前k个类及其概率?

如果有可能怎么做?感谢您的指导。

更新01: 我正在添加正在执行的代码。因此,我构建了一个神经网络,该网络具有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})
Run Code Online (Sandbox Code Playgroud)

现在,y_pred是ts_features的每个测试示例的类标签列表。但是,我希望不为每个测试示例获取一个单一的类标签,而是希望为每个示例获取前k个预测,同时每个k预测都带有某种概率。

ben*_*che 5

使用tf.nn.top_k()

top_k_values, top_k_indices = tf.nn.top_k(predictions, k=k)
Run Code Online (Sandbox Code Playgroud)

如果predictions是每个类别(即predictions[i] = prediction probability for class i)的概率向量,top_k_values则将包含中的k最高概率predictionstop_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})
Run Code Online (Sandbox Code Playgroud)