tensorflow苗条的损失功能

时间:2018-10-03 21:05:12

标签: python tensorflow

我正在尝试在slim / losses.py中更改tensorflow使用的损失函数。因此,在该函数中,我添加了一个loss_fn关键字,其默认值为nn.softmax_cross_entropy_with_logits。然后将cross_entropy的定义替换为

cross_entropy = loss_fn(labels=one_hot_labels,logits=logits,name='xentropy')

,一切正常。但随后,我将自己的损失函数(与库存股票相同)定义为:

def sce_by_hand(labels=[],logits=[],name=''):
  eps = 0.0001
  smax = tf.clip_by_value(tf.nn.softmax(logits),eps,1-eps)
  sum = tf.reduce_sum(labels * tf.log(smax),reduction_indices=[-1])
  return tf.reduce_mean(-sum,name=name)

如果smax == 0或smax == 1,则epsilon将使日志不发散。这可以运行,但预测值基本上为零。我知道我不应该“一个人”做这件事,因为股票函数经过精心设计以处理数值不稳定性等问题,但是我想完全切换到其他损失函数并重新实现标准softmax交叉熵损失似乎是自然而然的第一步。有人可以告诉我我在做什么错吗?

0 个答案:

没有答案