2016-06-13 79 views
0

基于ob在seq2seq模型中的损失函数(“sequence_loss_by_example” - 此处的上下文translate.py)我想评估一个实数值估计器的成本。我希望模型能够猜出可能在规模上变化很大的实际值。如何结合两个Crossentropies

现在,我的问题是:您是否可以反馈两个交叉熵的组合是否符合我实现它们的方式。我可以追加它们然后add_n它们吗?

for logit, target, weight in zip(logits, targets, weights): 
    real_target = target[:, 0:11] 
    real_logit = logit[:, 0:11] 
    anteil_target = target[:, 11:] 
    anteil_logit = logit[:, 11:] 

    total_size += 1.1 * weight 
    crossent   = weight * nn_ops.softmax_cross_entropy_with_logits(real_logit, real_target, name="main_bits_loss") 
    crossent_anteil = 0.1 * weight * nn_ops.softmax_cross_entropy_with_logits(anteil_logit, anteil_target, name="anteil_bits_loss") 

    log_perp_list.append(crossent) 
    log_perp_list.append(crossent_anteil) 

log_perps = math_ops.add_n(log_perp_list)/total_size 

return log_perps 

而且:为了调试,我该如何给这个张量命名?

real_target = target[:, 0:11] 

喜欢的东西:

real_target = target[:, 0:11] 
real_target.name('name_goes_here') 

THX一堆 菲利普

回答

1

的[:,0:11]符号内部调用tf.slice(),它确实需要一个名称参数。在你的情况下,你应该可以这样做:

real_target = tf.slice(target, [0, 0], [-1, 11], name="real_target")