Source code for hyperts.framework.dl.losses._losses

import math
import tensorflow as tf
from tensorflow.python.keras import losses
from tensorflow.python.keras import backend as K
from tensorflow.python.framework import ops
from tensorflow.python.ops import math_ops
from tensorflow.python.util import dispatch
from tensorflow.python.util.tf_export import keras_export


[docs]@keras_export('keras.losses.LogGaussianLoss') class LogGaussianLoss(losses.LossFunctionWrapper): """Log Gaussian loss, is applied to DeepAR. Args: name: (Optional) string name of the metric instance. Usage with `compile()` API: ```python model.compile( optimizer='sgd', loss=LogGaussianLoss(), metrics=['mse']) ``` """ def __init__(self, name='log_gaussian_loss', **kwargs): super(LogGaussianLoss, self).__init__(log_gaussian_error, name=name, **kwargs)
[docs]@keras_export('keras.losses.SymmetricMeanAbsolutePercentageError') class SymmetricMeanAbsolutePercentageError(losses.LossFunctionWrapper): """Symmetric Mean Absolute Percentage Error loss. Args: name: (Optional) string name of the metric instance. Usage with `compile()` API: ```python model.compile( optimizer='sgd', loss=SymmetricMeanAbsolutePercentageLoss(), metrics=['mse']) ``` """ def __init__(self, name='symmetric_mean_absolute_percentage_loss', **kwargs): super(SymmetricMeanAbsolutePercentageError, self).__init__( symmetric_mean_absolute_percentage_error, name=name, **kwargs)
[docs]@keras_export('keras.metrics.log_gaussian_error', 'keras.losses.log_gaussian_error') @dispatch.add_dispatch_support def log_gaussian_error(y_true, y_pred): y_pred = ops.convert_to_tensor(y_pred) y_true = math_ops.cast(y_true, y_pred.dtype) reshaped = [-1] + y_true.shape.as_list()[1:] mu = tf.reshape(y_pred[..., 0], shape=reshaped) sigma = tf.reshape(y_pred[..., 1], shape=reshaped) loss = 0.5 * math_ops.log(math_ops.sqrt(2 * math.pi)) \ + 0.5 * math_ops.log(math_ops.square(sigma)) \ + math_ops.truediv(math_ops.square(y_true - mu), 2 * math_ops.square(sigma)) return math_ops.reduce_mean(math_ops.square(loss))
[docs]@keras_export('keras.metrics.symmetric_mean_absolute_percentage_error', 'keras.metrics.smape', 'keras.metrics.SMAPE', 'keras.losses.symmetric_mean_absolute_percentage_error', 'keras.losses.smape', 'keras.losses.SMAPE') @dispatch.add_dispatch_support def symmetric_mean_absolute_percentage_error(y_true, y_pred): y_pred = ops.convert_to_tensor(y_pred) y_true = math_ops.cast(y_true, y_pred.dtype) diff = math_ops.abs(y_pred - y_true) / \ K.maximum((math_ops.abs(y_true) + math_ops.abs(y_pred)), K.epsilon()) return 2.0 * K.mean(diff, axis=-1)
losses_custom_objects = { 'LogGaussianLoss': LogGaussianLoss, 'log_gaussian_error': log_gaussian_error, 'SymmetricMeanAbsolutePercentageError': SymmetricMeanAbsolutePercentageError, 'symmetric_mean_absolute_percentage_error': symmetric_mean_absolute_percentage_error, }