-
Notifications
You must be signed in to change notification settings - Fork 204
Open
Description
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 是什么?
Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
No labels