J'essaie de participer à ma première compétition Kaggle où RMSLE
est donné comme fonction de perte requise. Car je n'ai rien trouvé sur la façon de mettre en œuvre ce loss function
J'ai essayé de me 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
?
C'est le NN que j'ai 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
Que j'ai trouvée sur GitHub mais je sais que la syntaxe n'est pas ce qui est requis. Je pense que le y_true
Et le y_pred
Devraient être définis avant d’être transmis à la déclaration, mais je ne sais pas exactement comment, je viens de commencer à programmer python = et je ne 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 chaque aide!
Lorsque vous utilisez une perte personnalisée, vous devez la mettre sans guillemets lorsque vous transmettez l'objet 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)))
model.compile(optimizer = "rmsprop", loss = root_mean_squared_error,
metrics =["accuracy"])
La réponse acceptée contient une erreur, ce qui conduit à ce que RMSE soit réellement MAE, conformément au problème suivant:
https://github.com/keras-team/keras/issues/10706
La définition correcte devrait être
def root_mean_squared_error(y_true, y_pred):
return K.sqrt(K.mean(K.square(y_pred - y_true)))
Si vous utilisez le dernier tensorflow tous les soirs, bien qu'il n'y ait pas de RMSE dans la documentation, il existe un tf.keras.metrics.RootMeanSquaredError()
dans le code source .
utilisation de l'échantillon:
model.compile(tf.compat.v1.train.GradientDescentOptimizer(learning_rate),
loss=tf.keras.metrics.mean_squared_error,
metrics=[tf.keras.metrics.RootMeanSquaredError(name='rmse')])