Avaliando o desempenho do modelo

Para avaliar o desempenho do modelo, chamamos evaluate método da seguinte forma -

loss_and_metrics = model.evaluate(X_test, Y_test, verbose=2)

Para avaliar o desempenho do modelo, chamamos evaluate método da seguinte forma -

loss_and_metrics = model.evaluate(X_test, Y_test, verbose=2)

Iremos imprimir a perda e precisão usando as duas declarações a seguir -

print("Test Loss", loss_and_metrics[0])
print("Test Accuracy", loss_and_metrics[1])

Ao executar as instruções acima, você verá a seguinte saída -

Test Loss 0.08041584826191042
Test Accuracy 0.9837

Isso mostra uma precisão de teste de 98%, o que deve ser aceitável para nós. O que significa para nós que em 2% dos casos, os dígitos manuscritos não seriam classificados corretamente. Também traçaremos as métricas de precisão e perda para ver o desempenho do modelo nos dados de teste.

Plotando métricas de precisão

Usamos o gravado historydurante nosso treinamento para obter um gráfico de métricas de precisão. O código a seguir traçará a precisão em cada época. Pegamos a precisão dos dados de treinamento (“acc”) e a precisão dos dados de validação (“val_acc”) para plotagem.

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

O gráfico de saída é mostrado abaixo -

Como você pode ver no diagrama, a precisão aumenta rapidamente nas duas primeiras épocas, indicando que a rede está aprendendo rapidamente. Posteriormente, a curva é nivelada, indicando que não são necessárias muitas épocas para treinar mais o modelo. Geralmente, se a precisão dos dados de treinamento (“acc”) continua melhorando enquanto a precisão dos dados de validação (“val_acc”) piora, você está encontrando overfitting. Indica que o modelo está começando a memorizar os dados.

Também traçaremos as métricas de perda para verificar o desempenho de nosso modelo.

Plotando Métricas de Perda

Novamente, representamos a perda nos dados de treinamento (“perda”) e teste (“val_loss”). Isso é feito usando o seguinte código -

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

A saída deste código é mostrada abaixo -

Como você pode ver no diagrama, a perda no conjunto de treinamento diminui rapidamente nas duas primeiras épocas. Para o conjunto de teste, a perda não diminui na mesma taxa que o conjunto de treinamento, mas permanece quase constante por várias épocas. Isso significa que nosso modelo está generalizando bem para dados não vistos.

Agora, usaremos nosso modelo treinado para prever os dígitos em nossos dados de teste.