Skip to content

关于chapter8的Crf的问题 #5

Description

@hjing100
def loss_layer(self, project_logits, lengths, name=None):
    """
    计算CRF的loss
    :param project_logits: [1, num_steps, num_tags]
    :return: scalar loss
    """
    with tf.name_scope("crf_loss" if not name else name):
        small = -1000.0
        # pad logits for crf loss
        start_logits = tf.concat(
            [small * tf.ones(shape=[self.batch_size, 1, self.relation_num]), tf.zeros(shape=[self.batch_size, 1, 1])],
            axis=-1)
        pad_logits = tf.cast(small * tf.ones([self.batch_size, self.num_steps, 1]), tf.float32)
        logits = tf.concat([project_logits, pad_logits], axis=-1)
        logits = tf.concat([start_logits, logits], axis=1)
        targets = tf.concat(
            [tf.cast(self.relation_num * tf.ones([self.batch_size, 1]), tf.int32), self.input_relation], axis=-1)

        self.trans = tf.get_variable(
            name="transitions",
            shape=[self.relation_num + 1, self.relation_num + 1],  # 1
            # shape=[self.relation_num, self.relation_num],  # 1
            initializer=self.initializer)
        log_likelihood, self.trans = crf_log_likelihood(
            inputs=logits,
            tag_indices=targets,
            # tag_indices=self.input_relation,
            transition_params=self.trans,
            # sequence_lengths=lengths
            sequence_lengths=lengths + 1
        )  # + 1
        return tf.reduce_mean(-log_likelihood, name='loss')

你好,
请问这里为什么要+1?
start_logits 是什么?

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions