Как реализовать эту потерю в керасе - PullRequest
2 голосов
/ 30 июня 2019

Я хочу реализовать эту потерю следующим образом: Loss

Это код:

def loss(output, target, from_logits=False):


        L1 = - tf.reduce_sum(target * tf.log(output), reduction_indices=len(output.get_shape()) - 1)
        L2 = tf.reduce_sumr(tf.square(tf.subtract(tf.reduce_sum(tf.multiply(j,output),  reduction_indices=len(output.get_shape()) - 1), y))))
        L3 = tf.reduce_sum(tf.reduce_sum(tf.multiply(output,tf.square(tf.subtract(j,tf.reduce_prod(tf.multiply(k,p<sub>i,k</sub>)))))))
        loss = L1 + L2 + L3
        return loss
  • Как насчет формулы, которую я реализую?Это правильно?

Пожалуйста, помогите мне.Большое спасибо.

1 Ответ

1 голос
/ 30 июня 2019
  • Предположим, у вас есть y_true с формой (samples, 11), одна горячая кодировка.
  • Предположим, что вы используете softmax (сумма классов = 1) активации в последнем слое

Потери в Керасе имеют вид def func(y_true, y_pred):

import keras.backend as K
from keras.losses import categorical_crossentropy

def loss(y_true, y_pred):

    #p
    p = y_pred                                        #(samples,11)

    #j or k
    j = K.cast_to_floatx(K.arange(10,21))             #(11,)
    j = K.reshape(j, (1,-1))                    #(1,11)

    #y_true as class number
    y = K.sum(y_true * j, axis=-1, keepdims=True)    #(samples, 1)

    #first term:
    L1 = categorical_crossentropy(y_true, y_pred)     #(samples,)

    #second term with y outstide sum in j
    kpk = j * p                                   #(samples, 11)
    kpkSum = K.sum(kpk, axis=-1, keepdims=True)   #(samples, 1)
    L2 = kpkSum - y                               #(samples, 1)
    L2 = K.square(L2) / 2.                        #(samples, 1)

    #third term:
    L3 = K.square(j - kpkSum)                      #(samples,11)
    L3 = p * L3                                    #(samples,11)
    L3 = K.sum(L3, axis=-1)                        #(samples,)

    return L1 + L2 + L3 #the mean in N is automatic by Keras
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...