通过 Sklearn 为 Tensorflow 中的预测测试添加指标

Posted

技术标签:

【中文标题】通过 Sklearn 为 Tensorflow 中的预测测试添加指标【英文标题】:Add metrics by Sklearn for prediction test in Tensorflow 【发布时间】:2017-09-28 04:05:00 【问题描述】:

我的 CNN 项目基于 AlexNet 模型实现 here。

我有两个主要功能,trainingprediction,我想问你关于预测部分的指标,它们从与训练集相比不同目录中的测试集读取图像。

这是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_pred1 个元素的列表,而 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 + tensorflow)

sklearn MLPRegressor 的 TensorFlow 副本产生其他结果

在 TensorFlow Udacity 课程中找不到 sklearn.linear_model

pytorch和sklearn哪个运行快

如何使用 tensorflow 数据集训练 sklearn 模型?