我在机器学习方面比较新,特别是在实现算法方面。我正在使用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})
现在y_pred是ts_features的每个测试示例的类标签列表。但是,我没有为每个测试示例获得1个单一类别的标签,而是希望每个示例都能获得前k个预测,每个k预测都伴随着某种概率。
答案 0 :(得分:3)
top_k_values, top_k_indices = tf.nn.top_k(predictions, k=k)
如果predictions
是每个类的概率向量(即predictions[i] = prediction probability for class i
),则top_k_values
将包含k
中predictions
个最高概率,{ {1}}将包含这些概率的索引,即相应的类。
假设在您的代码中,top_k_indices
是每个类的预测概率的向量:
y_