webdevqa.jp.net

KerasのRMSE / RMSLE損失関数

RMSLEが必要な損失関数として与えられる最初のKaggleコンペティションに参加しようとしています。私はこれを実装する方法を何も見つけていないloss functionRMSEで解決しようとしました。これは過去にKerasの一部であったことを知っていますが、backendを介してカスタマイズされた関数を使用して、最新バージョンで使用する方法はありますか?

これは私が設計したNNです。

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)

カスタマイズしたroot_mean_squared_error関数GitHubで見つけましたが、すべての場合、構文が必要なものではないことを知っています。私は思います y_true そしてその y_predは、リターンに渡される前に定義する必要がありますが、どのように正確かわからない、pythonでプログラミングを始めたばかりで、数学ではそれほど良くない...

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)) 

この関数で次のエラーが表示されます。

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

あなたのアイデアをありがとう、私はすべての助けに感謝します!

21
dennis

カスタム損失を使用する場合は、文字列ではなく関数オブジェクトを渡すため、引用符なしでそれを配置する必要があります。

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"])
34

受け入れられた回答にはエラーが含まれており、次の問題に従って、そのRMSEは実際にMAEになります。

https://github.com/keras-team/keras/issues/10706

正しい定義は

def root_mean_squared_error(y_true, y_pred):
        return K.sqrt(K.mean(K.square(y_pred - y_true)))
20
Germán Sanchis

最新のテンソルフローを毎晩使用している場合、ドキュメントにはRMSEはありませんが、 ソースコード にはtf.keras.metrics.RootMeanSquaredError()があります。

サンプル使用法:

model.compile(tf.compat.v1.train.GradientDescentOptimizer(learning_rate),
              loss=tf.keras.metrics.mean_squared_error,
              metrics=[tf.keras.metrics.RootMeanSquaredError(name='rmse')])
2
Richard Xue