通过 Sklearn 为 Tensorflow 中的预测测试添加指标
Posted
技术标签:
【中文标题】通过 Sklearn 为 Tensorflow 中的预测测试添加指标【英文标题】:Add metrics by Sklearn for prediction test in Tensorflow 【发布时间】:2017-09-28 04:05:00 【问题描述】:我的 CNN 项目基于 AlexNet 模型实现 here。
我有两个主要功能,training
和 prediction
,我想问你关于预测部分的指标,它们从与训练集相比不同目录中的测试集读取图像。
这是prediction
代码:
def prediction(self):
with tf.Session() as sess:
# Construct model
pred = self.alex_net_model(self.img_pl, self.weights, self.biases, self.keep_prob)
# Restore model.
ckpt = tf.train.get_checkpoint_state("ckpt_dir")
if(ckpt):
self.saver.restore(sess, MODEL_CKPT)
print "Model restored"
else:
print "No model checkpoint found to restore - ERROR"
return
### Metrics ###
y_p = tf.argmax(pred,1) # the value predicted
target_names = ['class 0', 'class 1', 'class 2']
list_pred_total = []
list_true_total = []
# Accuracy Precision Recall F1-score by TEST IMAGES
for step, elems in enumerate(self.BatchIteratorTesting(BATCH_SIZE)):
batch_imgs_test, batch_labels_test = elems
y_pred = sess.run([y_p], feed_dict=self.img_pl: batch_imgs_test, self.keep_prob: 1.0)
#print(len(y_pred))
list_pred_total.extend(y_pred)
y_true = np.argmax(batch_labels_test,1)
#print(len(y_true))
list_true_total.extend(y_true)
#### TODO: METRICS FOR PRECISION RECALL F1-SCORE ####
我的问题是:
我怎样才能像在training
中那样正确调用classification_report
?
为什么 y_pred
是 1 个元素的列表,而 y_true
是一个 len 64(批量大小)的 numpy 数组?
如果这两个 len 不同,我不能做metrics.classification_report(list_true_total, list_pred_total, target_names=target_names)
。
希望能解决我的疑惑。
【问题讨论】:
【参考方案1】:如果您调用y_pred = sess.run(y_p,...
(注意y_p
周围缺少[]
),您将得到一个 len(batch_size) 的 numpy 数组,如您所料。
关于分类报告的其他问题我不明白。
【讨论】:
感谢您对y_pred
的回答。我可以重新表述另一个问题:在这种情况下我如何正确调用metrics.classification_report
?
classification_report的文档有什么不清楚的地方?
这个疑问与调用[y_p]
而不是y_p
的问题有关,正如您正确建议我的那样。谢谢!以上是关于通过 Sklearn 为 Tensorflow 中的预测测试添加指标的主要内容,如果未能解决你的问题,请参考以下文章
TensorFlow/Sklearn 深度神经网络分类器类型错误
sklearn MLPRegressor 的 TensorFlow 副本产生其他结果