2017-05-08 4 views
6

J'essaie de participer à ma première compétition Kaggle où RMSLE est donnée comme fonction de perte requise. Car je n'ai rien trouvé comment mettre en œuvre ce loss function J'ai essayé de se contenter de RMSE. Je sais que cela faisait partie de Keras dans le passé, est-il possible de l'utiliser dans la dernière version, peut-être avec une fonction personnalisée via backend?Fonction de perte RMSE/RMSLE dans Keras

C'est le NN I conçu:

from keras.models import Sequential 
from keras.layers.core import Dense , Dropout 
from keras import regularizers 

model = Sequential() 
model.add(Dense(units = 128, kernel_initializer = "uniform", activation = "relu", input_dim = 28,activity_regularizer = regularizers.l2(0.01))) 
model.add(Dropout(rate = 0.2)) 
model.add(Dense(units = 128, kernel_initializer = "uniform", activation = "relu")) 
model.add(Dropout(rate = 0.2)) 
model.add(Dense(units = 1, kernel_initializer = "uniform", activation = "relu")) 
model.compile(optimizer = "rmsprop", loss = "root_mean_squared_error")#, metrics =["accuracy"]) 

model.fit(train_set, label_log, batch_size = 32, epochs = 50, validation_split = 0.15) 

J'ai essayé une fonction personnalisée root_mean_squared_error j'ai trouvé sur GitHub mais pour tout ce que je sais la syntaxe n'est pas ce qui est nécessaire. Je pense que le y_true et le y_pred faudrait définir avant passer au retour, mais je ne sais pas exactement comment, je viens de commencer avec la programmation en Python et je suis vraiment pas bon en maths ...

from keras import backend as K 

def root_mean_squared_error(y_true, y_pred): 
     return K.sqrt(K.mean(K.square(y_pred - y_true), axis=-1)) 

Je reçois l'erreur suivante avec cette fonction:

ValueError: ('Unknown loss function', ':root_mean_squared_error') 

Merci pour vos idées, j'apprécie toute l'aide!

Répondre

13

Lorsque vous utilisez une perte personnalisée, vous devez le mettre sans les guillemets, que vous passez l'objet de fonction, pas une chaîne:

def root_mean_squared_error(y_true, y_pred): 
     return K.sqrt(K.mean(K.square(y_pred - y_true), axis=-1)) 

model.compile(optimizer = "rmsprop", loss = root_mean_squared_error, 
       metrics =["accuracy"]) 
+1

fonctionne parfaitement bien, je vous remercie beaucoup d'avoir signalé cette erreur. Je n'y ai vraiment pas pensé car je suis un peu novice en programmation. Vous ne savez pas par hasard comment éditer cette fonction personnalisée afin qu'elle calcule l'erreur LOGARITHMIC de la racine carrée moyenne, voulez-vous? – dennis

+0

Il me donne la fonction de perte inconnue: root_mean_squared_error – Jitesh

+0

@Jitesh S'il vous plaît ne faites pas de tels commentaires, faites votre propre question avec le code source. –