有没有一种方法可以自定义我的损失函数以仅增加一类的召回率?

时间:2019-06-21 00:15:34

标签: python tensorflow

首先,谢谢。

我正在将Tensorflow 1.13与Python 3配合使用。我试图在具有4个类的数据上创建CNN分类器,它们是一键编码的。但是,我需要它产生的见解实际上是围绕发现0类或3类。如果它告诉我数据行属于1类或2类,这对我的目标没有多大用处。 sklearn classification_report的输出如下,我想在模型训练期间增加对0和3类的回忆。精度也很好。

               precision   recall   f1-score  support

          0       0.13      0.42      0.20      1484
          1       0.15      0.74      0.24       696
          2       0.81      0.34      0.48     12325
          3       0.13      0.23      0.17      1495

avg / total       0.65      0.35      0.41     16000  

我对python和TF都比较陌生,经历了一些教程,现在才开始建立自己的模型。我过去一直无法真正发挥自己在过去观看过的任何学习课程中讨论过的功能的能力。例如,我知道Keras具有自定义损失功能,但是我不确定我是否知道如何将其集成到已经完成的工作中。我现有项目的相关内容如下。

# my current loss function, what I want to 
# replace because just plain accuracy isn't 
# terribly helpful
cross_entropy = tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits(labels=y_true,logits=y_pred))

# setting up the trainer
optimizer = tf.train.AdamOptimizer(learning_rate=0.0001)
train = optimizer.minimize(cross_entropy)

# run it
init = tf.global_variables_initializer()

with tf.Session() as sess:
    sess.run(init)
    for i in range(steps):
        batch_x, batch_y = dataHelper.next_batch(100)

        sess.run(train,feed_dict={x:batch_x,y_true:batch_y,hold_prob:0.5})
        if (i + 1) % 100 == 0:
            print('on step {}'.format(i))
            preds_decoded = tf.argmax(y_pred,1)
            trues_decoded = tf.argmax(y_true,1)
            final_predictions, true_values = sess.run([preds_decoded, trues_decoded],
                                    feed_dict={x:price_data_only_test,y_true:test_labels,hold_prob:1.0})
            print(classification_report(y_true=true_values,y_pred=final_predictions))

0 个答案:

没有答案