2016-11-12 5 views
2

ich Keras Daten Augmentierung verwendet, um Bildklassifizierung (zehn-Klasse Bilder) durchzuführen. Die letzte Trainings Epoche gibt die Ergebnisse wie folgt:Keras: was ist der Unterschied zwischen model.evaluate_generator und model.predict_generator

Epoch 50/50 
4544/4545 [============================>.] - ETA: 0s - loss: 0.7628 - acc: 0.7359 loss: 0.762710434054 
New learning rate: 0.00214407973866 
4545/4545 [==============================] - 115s - loss: 0.7627 - acc: 0.7360 - val_loss: 0.5563 - val_acc: 0.8124 

dann die trainierten Modell bewerten nach:

scores = model.evaluate_generator(test_generator,1514) #1514 testing images 
print("Accuracy = ", scores[1]) 

Es führt zu folgenden Ergebnissen:

('Accuracy = ', 0.80713342132152621) 

Die Genauigkeit ist nicht genau das Gleiche wie in der letzten Trainingsphase. Ich verstehe den Unterschied nicht, obwohl er marginal ist.

Ferner gibt model.predict_generator völlig anderes Ergebnis, das ein Array ist wie folgt dargestellt:

array([[ 4.98306963e-06, 1.83774697e-04, 5.49453034e-05, ..., 
     9.25193787e-01, 7.74697517e-04, 5.79946618e-06], 
    [ 2.06657965e-02, 2.35974863e-01, 2.66802781e-05, ..., 
     2.16283044e-03, 8.42395966e-05, 2.46680051e-04], 
    [ 1.40222355e-05, 1.22740224e-03, 7.52218883e-04, ..., 
     3.76749843e-01, 3.85622412e-01, 6.47417846e-06], 
    ..., 
    [ 9.94064331e-01, 1.30184961e-03, 1.08694976e-05, ..., 
     1.25828717e-06, 2.29093766e-05, 9.01326363e-04], 
    [ 7.10375488e-01, 2.01397449e-01, 3.10241080e-06, ..., 
     3.66877168e-10, 1.66322934e-05, 1.93767438e-08], 
    [ 8.13350256e-04, 2.67575349e-04, 6.79878794e-05, ..., 
     8.63052785e-01, 9.70983761e-04, 8.54507030e-04]], dtype=float32) 

Ich weiß nicht, was die Matrix darstellt, und was ist der Unterschied zwischen model.evaluate_generator und Modell. Vorhersagegenerator.

Es wird angemerkt, dass die resultierende Anordnung eine Form von 1514 × 10 hat. Das Array sollte die Vorhersagewahrscheinlichkeiten für jede Klasse für den Satz von Testbildern sein. Wenn ja, wie kann man basierend auf dem Ergebnis eine Konfusionsmatrix berechnen?

Antwort

8

predict_generator nimmt Ihre Testdaten und gibt Ihnen die Ausgabe.

evaluate_generator verwendet sowohl Ihren Testeingang als auch -ausgang. Es prognostiziert zuerst die Ausgabe mithilfe der Trainingseingabe und bewertet dann die Leistung durch Vergleich mit der Testausgabe. Es gibt also ein Maß für die Leistung, d. H. Für die Genauigkeit in Ihrem Fall.

Verwandte Themen