Определение функции потерь в Keras как поэлементного умножения с отрицанием каждого второго элемента

#tensorflow #machine-learning #keras #neural-network

#tensorflow #машинное обучение #keras #нейронная сеть

Вопрос:

Я пытаюсь определить свою собственную функцию затрат в Keras, работающую поверх Tensorflow. Имея y_true = [a0, a1, a2, a3, ..., an] и y_pred = [b0, b1, b2, b3, ..., bn] как основную истину и прогнозы, соответственно, я хочу определить функцию затрат как: cost = a0*b0 - a1*b1 a2*b2 - a3*b3 ... .

Короче говоря, я хочу определить что-то вроде этого:

 def my_cost(y_true, y_pred):
    return tf.math.multiply(y_true, y_pred)
  

но каждый второй элемент должен быть отрицаемым. У вас есть какие-либо идеи?

Ответ №1:

Я ожидаю cost_function , что сработает следующее; по сути, мы делаем трюк и выбираем нечетные и четные индексы; мы умножаем только y_true y_pred аналоги и с учетом их странности.

Затем мы используем tf.math.reduce_sum() , чтобы фактически вычислить сумму стоимости; вы также можете использовать tf.math.subtract(first_sum,second_sum) , но для простоты я сохранил « - .

 def my_cost(y_true, y_pred):
    y_true_even = y_true[::2]
    y_true_odd = y_true[1::2]

    y_pred_even = y_pred[::2]
    y_pred_odd = y_pred[1::2]

    result = tf.math.reduce_sum(tf.math.multiply(y_true_even,y_pred_even)) - tf.math.reduce_sum(tf.math.multiply(y_true_odd,y_pred_odd)) 
    return result