[PYTHON] Évaluez les performances de CNN avec une fonction d'évaluation personnalisée

Je faisais une analyse de données et j'ai dû créer et évaluer moi-même une fonction d'évaluation CNN, alors notez comment la créer.

Fonction d'évaluation à créer

Cette fois, j'ai créé le coefficient de décision (R2) en tant que fonction d'évaluation. R2 est exprimé par la formule suivante.

20191020140223.png

programme

Le programme de la fonction d'évaluation (R2) elle-même est le suivant.

def r2(y_true, y_pred):
    SS_res =  K.sum(K.square(y_true - y_pred)) 
    SS_tot = K.sum(K.square(y_true - K.mean(y_true))) 
    return ( 1 - SS_res/(SS_tot + K.epsilon()) )

Incorporez cette fonction dans la métrique du modèle comme suit: Cette fois, nous utilisons le modèle CNN.

def build_model():

    model = Sequential()
    model.add(Dense(500, activation='relu', input_shape=(X_train.shape[1],), kernel_initializer='he_normal'))
    model.add(Dropout(0.1))
    
    model.add(Dense(300, activation='relu', kernel_initializer='he_normal'))
    model.add(Dropout(0.1))

    model.add(Dense(100, activation='relu', kernel_initializer='he_normal'))
    model.add(Dropout(0.1))

    model.add(Dense(1, activation='sigmoid'))
    
    model.compile(loss='binary_crossentropy', optimizer=Adam(), metrics=['mae', r2])
    
    return model

En exécutant ce modèle comme suit, R2 sera également affiché et sorti.

reg = KerasRegressor(build_fn=build_model, validation_data=(X_test, y_test), 
                     batch_size=100, 
                     epochs=5, 
                     verbose=1)
history = reg.fit(X_train, y_train)
Train on 11671 samples, validate on 2060 samples
Epoch 1/5
11671/11671 [==============================] - 4s 366us/step 
- loss: 1.1265 - mean_absolute_error: 0.2145 - r2_keras: -1.7520 - val_loss: 0.6966 - val_mean_absolute_error: 0.1376 - val_r2_keras: 0.0823
Epoch 2/5
11671/11671 [==============================] - 4s 311us/step 
- loss: 0.7213 - mean_absolute_error: 0.1264 - r2_keras: 0.1204 - val_loss: 0.6822 - val_mean_absolute_error: 0.1165 - val_r2_keras: 0.3338
Epoch 3/5
11671/11671 [==============================] - 4s 311us/step 
- loss: 0.6593 - mean_absolute_error: 0.1153 - r2_keras: 0.3085 - val_loss: 0.6790 - val_mean_absolute_error: 0.1015 - val_r2_keras: 0.4019
Epoch 4/5
11671/11671 [==============================] - 4s 308us/step 
- loss: 0.6433 - mean_absolute_error: 0.0993 - r2_keras: 0.4104 - val_loss: 0.6678 - val_mean_absolute_error: 0.0991 - val_r2_keras: 0.4225
Epoch 5/5
11671/11671 [==============================] - 4s 315us/step 
- loss: 0.6362 - mean_absolute_error: 0.0953 - r2_keras: 0.4335 - val_loss: 0.6646 - val_mean_absolute_error: 0.0982 - val_r2_keras: 0.4332

En modifiant le contenu de la fonction d'évaluation, elle peut être évaluée avec diverses fonctions personnalisées.

Recommended Posts

Évaluez les performances de CNN avec une fonction d'évaluation personnalisée
Utiliser un noyau personnalisé avec WSL2
Créer un décorateur de fonction Python avec Class
Equipé d'une fonction carte utilisant payjp
[Piyopiyokai # 1] Jouons avec Lambda: création d'une fonction Lambda
Créer une fonction pour visualiser / évaluer le résultat du clustering
[Pratique] Créez une application Watson avec Python! # 2 [Fonction de traduction]
Créer une fonction pour décrire les polices japonaises avec OpenCV
Créer une application Todo avec Django ⑤ Créer une fonction d'édition de tâches