モデルのパフォーマンスの評価
モデルのパフォーマンスを評価するために、 evaluate 次のような方法-
loss_and_metrics = model.evaluate(X_test, Y_test, verbose=2)
モデルのパフォーマンスを評価するために、 evaluate 次のような方法-
loss_and_metrics = model.evaluate(X_test, Y_test, verbose=2)
次の2つのステートメントを使用して、損失と精度を出力します。
print("Test Loss", loss_and_metrics[0])
print("Test Accuracy", loss_and_metrics[1])
上記のステートメントを実行すると、次の出力が表示されます-
Test Loss 0.08041584826191042
Test Accuracy 0.9837
これは98%のテスト精度を示しており、これは私たちに受け入れられるはずです。2%のケースで、手書きの数字が正しく分類されないということは、私たちにとって何を意味しますか。また、精度と損失のメトリックをプロットして、モデルがテストデータでどのように機能するかを確認します。
精度メトリックのプロット
記録したものを使用します history精度メトリックのプロットを取得するためのトレーニング中。次のコードは、各エポックの精度をプロットします。プロットのために、トレーニングデータの精度(「acc」)と検証データの精度(「val_acc」)を取得します。
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')
出力プロットを以下に示します-
図からわかるように、最初の2つのエポックで精度が急速に向上し、ネットワークが高速に学習していることを示しています。その後、曲線は平坦になり、モデルをさらにトレーニングするために必要なエポックが多すぎないことを示します。一般に、トレーニングデータの精度(「acc」)が向上し続け、検証データの精度(「val_acc」)が悪化する場合は、過剰適合が発生しています。モデルがデータを記憶し始めていることを示します。
また、モデルのパフォーマンスを確認するために損失メトリックをプロットします。
損失メトリックのプロット
ここでも、トレーニング(「loss」)データとテスト(「val_loss」)データの両方に損失をプロットします。これは、次のコードを使用して行われます-
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')
このコードの出力を以下に示します-
図からわかるように、トレーニングセットの損失は、最初の2つのエポックで急速に減少します。テストセットの場合、損失はトレーニングセットと同じ割合で減少しませんが、複数のエポックでほぼフラットのままです。これは、私たちのモデルが目に見えないデータにうまく一般化していることを意味します。
次に、トレーニング済みモデルを使用して、テストデータの桁を予測します。