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

时间:2017-04-30 14:03:25

标签: python numpy tensorflow scikit-learn

我的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 ####

我的问题是:

  • 如何在classification_report
  • 中正确调用training
  • 为什么y_pred 1 elem的列表,而y_true是len 64 (批量大小)的numpy数组?

如果这两个len不同,我不能metrics.classification_report(list_true_total, list_pred_total, target_names=target_names)。 希望能解决我的疑虑。

1 个答案:

答案 0 :(得分:1)

如果你拨打y_pred = sess.run(y_p,...(注意[]周围缺少y_p),你会得到一个numpy数组len(batch_size)。

我不明白关于classification_report的其他问题。