Ocena wydajności modelu
Aby ocenić wydajność modelu, dzwonimy evaluate metoda w następujący sposób -
loss_and_metrics = model.evaluate(X_test, Y_test, verbose=2)
Aby ocenić wydajność modelu, dzwonimy evaluate metoda w następujący sposób -
loss_and_metrics = model.evaluate(X_test, Y_test, verbose=2)
Wydrukujemy utratę i dokładność, korzystając z następujących dwóch stwierdzeń -
print("Test Loss", loss_and_metrics[0])
print("Test Accuracy", loss_and_metrics[1])
Po uruchomieniu powyższych instrukcji zobaczysz następujące dane wyjściowe -
Test Loss 0.08041584826191042
Test Accuracy 0.9837
To pokazuje dokładność testu 98%, co powinno być dla nas akceptowalne. Co dla nas oznacza, że w 2% przypadków odręczne cyfry nie zostałyby poprawnie sklasyfikowane. Będziemy również wykreślać dokładność i metryki strat, aby zobaczyć, jak model działa na danych testowych.
Wykreślanie metryk dokładności
Używamy nagranych historypodczas naszego szkolenia, aby uzyskać wykres metryk dokładności. Poniższy kod wykreśla dokładność dla każdej epoki. Zbieramy dokładność danych treningowych („acc”) i dokładność danych walidacyjnych („val_acc”) do wykreślenia.
plot.subplot(2,1,1)
plot.plot(history.history['acc'])
plot.plot(history.history['val_acc'])
plot.title('model accuracy')
plot.ylabel('accuracy')
plot.xlabel('epoch')
plot.legend(['train', 'test'], loc='lower right')
Wykres wyjściowy pokazano poniżej -
Jak widać na diagramie, dokładność szybko rośnie w pierwszych dwóch epokach, co wskazuje, że sieć szybko się uczy. Następnie krzywa spłaszcza się, co wskazuje, że nie potrzeba zbyt wielu epok, aby dalej trenować model. Ogólnie rzecz biorąc, jeśli dokładność danych uczących („acc”) stale się poprawia, podczas gdy dokładność danych walidacyjnych („val_acc”) pogarsza się, występuje nadmierne dopasowanie. Wskazuje, że model zaczyna zapamiętywać dane.
Będziemy również wykreślać wskaźniki strat, aby sprawdzić wydajność naszego modelu.
Wykreślanie wskaźników strat
Ponownie wykreślamy stratę zarówno na danych treningowych („strata”), jak i testowych („val_loss”). Odbywa się to za pomocą następującego kodu -
plot.subplot(2,1,2)
plot.plot(history.history['loss'])
plot.plot(history.history['val_loss'])
plot.title('model loss')
plot.ylabel('loss')
plot.xlabel('epoch')
plot.legend(['train', 'test'], loc='upper right')
Wynik tego kodu pokazano poniżej -
Jak widać na wykresie, strata na zbiorze uczącym gwałtownie maleje w pierwszych dwóch epokach. W przypadku zestawu testowego strata nie zmniejsza się w tym samym tempie co zbiór uczący, ale pozostaje prawie płaska przez wiele epok. Oznacza to, że nasz model dobrze uogólnia niewidoczne dane.
Teraz użyjemy naszego wytrenowanego modelu do przewidywania cyfr w naszych danych testowych.