![](/img/trans.png)
[英]XGBClassifier: Bad predictions after training, saving and loading a model
[英]Unable to extract individual predictions after training a model
我有一個 model 報告測試數據集的准確度約為 0.67。 但是,我想提取每個樣本的單個預測,看看它在每個樣本上的表現如何。 我讀到我應該在 session 中運行 logits 層,並會得到每個樣本的預測數組。 這似乎不起作用,因為它只會對驗證集中的每個樣本的第一個類別進行預測。
# predictions
logits = tf.layers.dense(flat_d, NUM_CLASSES, activation=tf.nn.relu)
# Cost function and optimizer
cost = tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits(logits=logits,labels=labels))
# cost = -tf.reduce_sum(labels*tf.log(logits + 1e-10))
train_step = tf.train.AdamOptimizer(learning_rate_).minimize(cost)
# Accuracy
correct_pred = tf.equal(tf.argmax(logits, 1), tf.argmax(labels, 1))
accuracy = tf.reduce_mean(tf.cast(correct_pred, tf.float32), name='accuracy')
....
print("Initializing the model")
sess = tf.Session()
sess.run(tf.global_variables_initializer())
for e in np.arange(num_epochs):
bx,by = load_batch(trainX,trainY,batch_size_)
sess.run(train_step,feed_dict={inputs:bx,labels:by,keep_prob:0.9,learning_rate_:learn_rate})
acc = sess.run(accuracy,feed_dict={inputs:testX,labels:testY,keep_prob:1.0,learning_rate_:learn_rate})
print("----------\nAccuracy:%.3f"%(acc))
# Extract individual precitions by class
print(sess.run(logits,feed_dict={inputs:testX,labels:testY,keep_prob:1.0}))
以下是output的總結:
Number of validation samples: 203
By category:
0: 34
1: 138
2: 31
print(sess.run(accuracy,feed_dict={inputs:testX,labels:testY,keep_prob:1.0,learning_rate_:learn_rate}))
Accuracy:0.680
print(sess.run(logits,feed_dict={inputs:testX,labels:testY,keep_prob:1.0}))
[[1.6453042 0. 0. ]
[1.454038 0. 0. ]
[1.6372575 0. 0. ]
[1.5505953 0. 0. ]
[1.6624011 0. 0. ]
[1.6376897 0. 0. ]
[1.5477558 0. 0. ]
[1.5303426 0. 0. ]
[1.3636262 0. 0. ]
[1.5397886 0. 0. ]
[1.8849531 0. 0. ]
.....
etc.
關於我做錯了什么的任何指示,或者我如何提取每個樣本的預測而不僅僅是整體准確性?
謝謝
命令print(sess.run(logits,feed_dict={inputs:testX,labels:testY,keep_prob:1.0}))
打印每個Class
的Probabilities
。
在您的代碼中,您使用的是NUM_CLASSES
和softmax_cross_entropy_with_logits
,這表明您的機器學習問題是具有 3 個Classes
的Classification
。
截至目前,您的預測不正確(
[[1.6453042 0. 0. ]
[1.454038 0. 0. ]
) 因為您使用Activation
Function, ' Relu
' 進行Classification
。
您需要在代碼中為正確Predictions
進行的一項更正是將“ relu
”替換為“ softmax
”,即替換
logits = tf.layers.dense(flat_d, NUM_CLASSES, activation=tf.nn.relu)
和
logits = tf.layers.dense(flat_d, NUM_CLASSES, activation=tf.nn.softmax)
然后print(sess.run(logits,feed_dict={inputs:testX,labels:testY,keep_prob:1.0}))
將 output 之類的東西,
[9.87792790e-01, 1.05240829e-02, 4.70216728e-05],
[8.80016625e-01, 1.13000005e-01, 5.14236337e-04]
每個值代表對應於相應Class
的Probability
。
如果您遇到任何其他錯誤,請告訴我,我很樂意為您提供幫助。
希望這可以幫助。 快樂學習!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.