我是靠谱客的博主 落寞芝麻,这篇文章主要介绍使用tensorflow自定义loss函数定义python函数wrapper类,现在分享给大家,希望可以做个参考。

文章目录

  • 定义python函数
  • wrapper

定义python函数

复制代码
1
2
3
4
5
6
7
8
9
def my_huber_loss(y_true, y_pred): error = y_true - y_pred is_small_error = tf.abs(error) <= threshold small_error_loss = tf.square(error) / 2 big_error_loss = threshold * (tf.abs(error) - (0.5 * threshold)) return tf.where(is_small_error, small_error_loss, big_error_loss) model.compile(loss=my_huber_loss, optimizer=...)

需要注意的是:如果我们想要传入超参数,我们不能直接在函数内添加参数,而应该使用wrapper,因为作为loss函数只能够拥有 y _ t r u e , y _ p r e d y_true,y_pred y_true,y_pred两个参数

wrapper

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
# wrapper function that accepts the hyperparameter def my_huber_loss_with_threshold(threshold): # function that accepts the ground truth and predictions def my_huber_loss(y_true, y_pred): error = y_true - y_pred is_small_error = tf.abs(error) <= threshold small_error_loss = tf.square(error) / 2 big_error_loss = threshold * (tf.abs(error) - (0.5 * threshold)) return tf.where(is_small_error, small_error_loss, big_error_loss) # return the inner function tuned by the hyperparameter return my_huber_loss

同时,我们也可以定义一个loss类,可以支持更多操作。

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
from tensorflow.keras.losses import Loss class MyHuberLoss(Loss): # initialize instance attributes def __init__(self, threshold=1): super().__init__() self.threshold = threshold # compute loss def call(self, y_true, y_pred): error = y_true - y_pred is_small_error = tf.abs(error) <= self.threshold small_error_loss = tf.square(error) / 2 big_error_loss = self.threshold * (tf.abs(error) - (0.5 * self.threshold)) return tf.where(is_small_error, small_error_loss, big_error_loss)

需要注意的点:

  • 尽量使用TensoFlow提供的API进行各种计算。例如 tensorflow.keras.backend提供的各种函数
  • 传入类型和返回类型都必须是Tensor类型。(所以不要使用numpy的计算函数)

该类需要从Loss基类继承,更多的操作可以参阅TensorFlow官方文档

最后

以上就是落寞芝麻最近收集整理的关于使用tensorflow自定义loss函数定义python函数wrapper类的全部内容,更多相关使用tensorflow自定义loss函数定义python函数wrapper类内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(71)

评论列表共有 0 条评论

立即
投稿
返回
顶部