FuYanzhe2 / Name-Entity-Recognition

Lstm-crf,Lattice-CRF,bert-ner及近年ner相关论文follow
564 stars 195 forks source link

验证时eval_loss为何重新定义,以及和total_loss的区别 #17

Open haozaiiii opened 3 years ago

haozaiiii commented 3 years ago

为什么验证的时候重新定义了eval_loss,原来tatal_loss此时又代表什么呢? 代码位置如下:

针对NER ,进行了修改

        def metric_fn(label_ids, logits, trans):
            # 首先对结果进行维特比解码
            # crf 解码

            weight = tf.sequence_mask(FLAGS.max_seq_length)
            precision = tf_metrics.precision(label_ids, pred_ids, num_labels, [2, 3, 4, 5, 6, 7], weight)
            recall = tf_metrics.recall(label_ids, pred_ids, num_labels, [2, 3, 4, 5, 6, 7], weight)
            f = tf_metrics.f1(label_ids, pred_ids, num_labels, [2, 3, 4, 5, 6, 7], weight)

            return {
                "eval_precision": precision,
                "eval_recall": recall,
                "eval_f": f,
                # "eval_loss": loss,
            }

        eval_metrics = (metric_fn, [label_ids, logits, trans])
        # eval_metrics = (metric_fn, [label_ids, logits])
        output_spec = tf.contrib.tpu.TPUEstimatorSpec(
            mode=mode,
            loss=total_loss,
            eval_metrics=eval_metrics,
            scaffold_fn=scaffold_fn)  #