[PYTHON] Bewerten Sie die CNN-Leistung mit einer benutzerdefinierten Bewertungsfunktion

Ich habe eine Datenanalyse durchgeführt und musste selbst eine CNN-Bewertungsfunktion erstellen und bewerten. Notieren Sie sich daher, wie diese erstellt wird.

Auswertungsfunktion zu erstellen

Dieses Mal habe ich den Entscheidungskoeffizienten (R2) als Bewertungsfunktion erstellt. R2 wird durch die folgende Formel ausgedrückt.

20191020140223.png

Programm

Das Programm der Bewertungsfunktion (R2) selbst ist wie folgt.

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

Betten Sie diese Funktion wie folgt in die Metrik des Modells ein: Dieses Mal verwenden wir das CNN-Modell.

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

Wenn Sie dieses Modell wie folgt ausführen, wird auch R2 angezeigt und ausgegeben.

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

Durch Ändern des Inhalts der Auswertungsfunktion kann diese mit verschiedenen benutzerdefinierten Funktionen ausgewertet werden.

Recommended Posts

Bewerten Sie die CNN-Leistung mit einer benutzerdefinierten Bewertungsfunktion
Verwenden Sie einen benutzerdefinierten Kernel mit WSL2
Erstellen Sie mit Class einen Python-Funktionsdekorator
Ausgestattet mit einer Kartenfunktion mit payjp
[Piyopiyokai # 1] Spielen wir mit Lambda: Erstellen einer Lambda-Funktion
Erstellen Sie eine Funktion zur Visualisierung / Auswertung des Clustering-Ergebnisses
[Übung] Erstellen Sie eine Watson-App mit Python! # 2 [Übersetzungsfunktion]
Erstellen Sie mit OpenCV eine Funktion zum Beschreiben japanischer Schriftarten
Todo-App mit Django erstellen ⑤ Funktion zum Bearbeiten von Aufgaben erstellen