如何在Tensorflow中编写自定义损失函数?
tensorflow
5
0

我是tensorflow 。我想编写自己的自定义损失函数。是否有关于此的教程?例如,铰链损失或sum_of_square_loss(尽管这已经在tf中了)?我可以直接在python中进行操作还是必须编写cpp代码?

参考资料:
Stack Overflow
收藏
评论
共 3 个回答
高赞 时间 活跃

我们需要写下损失函数。例如,我们可以使用基本均方误差作为预测y和目标y_的损失函数:

 loss_mse = 1/n(Sum((y-y_)^2))

张量有一些基本功能,例如tf.add(x,y)tf.sub(x,y)tf.square(x)tf.reduce_sum(x)

然后我们可以在Tensorflow中定义损失函数,如下所示:

cost = tf.reduce_mean(tf.square(tf.sub(y,y_)))

注意:y和y_是张量。

此外,如果我们可以写下等式,则可以定义任何其他损失函数。对于某些培训操作员(最小化器),损失函数应满足某些条件(平稳,可微...)。

一句话,Tensorflow将数组,常量,变量定义为张量,使用tf函数定义计算,并使用会话通过图形运行。我们可以定义我们喜欢的任何东西,最后运行它。

收藏
评论

在几乎所有tensorflow教程中,它们都使用自定义函数。例如,在最开始的教程中,他们编写了一个自定义函数:

对当前模型和所提供数据之间的增量平方求和

squared_deltas = tf.square(linear_model - y)
loss = tf.reduce_sum(squared_deltas)

在下一个针对初学者的MNIST中,他们使用了交叉熵

cross_entropy = tf.reduce_mean(-tf.reduce_sum(y_ * tf.log(y), reduction_indices=[1]))

如您所见,它一点也不难:您只需要以张量格式编码函数并使用它们的基本函数即可。

例如,这里是实现F-beta分数F1分数的通用方法)的方法。其公式为:

在此处输入图片说明

我们唯一需要做的就是找到如何计算布尔值或0/1值的true_positive,false_positive,false_negative。如果向量的值为0/1,则可以将每个值计算为:

TP = tf.count_nonzero(actual, predicted)
FP = tf.count_nonzero((actual - 1) * predicted)
FN = tf.count_nonzero((predicted - 1) * actual)

现在,一旦您知道这些值,就可以轻松获得

denom = (1 + b**2) * TP + b**2 TN + FP
Fb = (1 + b**2) * TP / denom
收藏
评论

除了其他答案,如果可以将损失函数表示为现有函数的组合,则可以用Python编写损失函数。

例如,看一下sigmoid_cross_entropy_with_logits 链接的实现, sigmoid_cross_entropy_with_logits 链接是使用基本转换实现的。

收藏
评论
新手导航
  • 社区规范
  • 提出问题
  • 进行投票
  • 个人资料
  • 优化问题
  • 回答问题

关于我们

常见问题

内容许可

联系我们

@2020 AskGo
京ICP备20001863号