Вы можете реализовать функции потерь в зависимости от характера ваших переменных. Некоторые из стандартных приведены ниже:
Если это просто числа (а не вероятности): потеря MSE
def my_custom_loss(y_true_0, ..., y_true_n, y_pred_0, ..., y_true_n):
y_true = tf.stack([y_true_0,...y_true_n], axis=0)
y_pred = tf.stack([y_pred_0,...y_pred_n], axis=0)
something = tf.losses.mean_squared_error(y_true, y_pred)
return something
ИЛИ Абсолютная потеря разницы
def my_custom_loss(y_true_0, ..., y_true_n, y_pred_0, ..., y_true_n):
y_true = tf.stack([y_true_0,...y_true_n], axis=0)
y_pred = tf.stack([y_pred_0,...y_pred_n], axis=0)
something = tf.losses.absolute_difference(y_true, y_pred)
return something
Если это один из горячих векторов (допустимые вероятности):
def my_custom_loss(y_true_0, ..., y_true_n, y_pred_0, ..., y_true_n):
y_true = tf.stack([y_true_0,...y_true_n], axis=0)
y_pred = tf.stack([y_pred_0,...y_pred_n], axis=0)
something = tf.reduce_mean(tf.keras.losses.binary_crossentropy(y_true, y_pred))
return something
Если они нули и единицы (недействительные вероятности):
def my_custom_loss(y_true_0, ..., y_true_n, y_pred_0, ..., y_true_n):
y_true = tf.stack([y_true_0,...y_true_n], axis=0)
y_pred = tf.stack([y_pred_0,...y_pred_n], axis=0)
something = tf.reduce_mean(tf.keras.losses.binary_crossentropy(y_true, y_pred), from_logits=True)
return something
Это не ограничивается только ими. Вы можете создать свою собственную функцию потерь, если она дифференцируема.
person
learner
schedule
13.11.2019