2016-10-15 20 views
5

Chciałbym utworzyć niestandardową funkcję strat, który ma pojęcie masy, która jest aktualizowana w oparciu o to, co epoka jestem wJak utworzyć funkcję straty, które zmienia się w epoce, w Keras

. Na przykład: Powiedzmy mam funkcji straty, które ma beta wagę, gdzie beta zwiększa się w ciągu pierwszych 20 epok ...

def custom_loss(x, x_pred): 
    loss1 = objectives.binary_crossentropy(x, x_pred) 
    loss2 = objectives.mse(x, x_pred) 
    return (beta*current_epoch/20) * loss1 + loss2 

Jak mogę zaimplementować coś podobnego do funkcji strat Keras?

Odpowiedz

0

Patrząc na ich dokumentację, wspominają, że można użyć funkcji symbolicznych theano/Tf, które zwracają skalar dla każdego punktu danych. Więc można zrobić coś takiego

loss = tf.contrib.losses.softmax_cross_entropy(x, x_pred) * 
     (beta * current_epoch/20) + 
     tf.contrib.losses.mean_squared_error 

Trzeba by przejść xi x_pred jako xi x_pred jak tf.placeholders Myślę, że dla stworzenia modelu można użyć Keras ale potem znowu będzie trzeba uruchomić obliczeniowa wykres z sess.run()

Odniesienia: https://blog.keras.io/keras-as-a-simplified-interface-to-tensorflow-tutorial.html#using-keras-models-with-tensorflow