Kerasを使用して最初のモデルを作成したばかりで、これが出力です。 Keras人工ニューラルネットワークを構築した後に得られる標準出力のように見えます。ドキュメンテーションを見ても、エポックとは何か、出力に出力される損失とは何かを完全には理解していません。
エポックとケラスの損失は何ですか?
(おそらく非常に基本的な質問であることは知っていますが、答えをオンラインで見つけることができなかったようです。答えがドキュメントから収集するのが本当に難しい場合は、他の人が同じ質問を持っていると思い、ここに投稿することにしました)
Epoch 1/20
1213/1213 [==============================] - 0s - loss: 0.1760
Epoch 2/20
1213/1213 [==============================] - 0s - loss: 0.1840
Epoch 3/20
1213/1213 [==============================] - 0s - loss: 0.1816
Epoch 4/20
1213/1213 [==============================] - 0s - loss: 0.1915
Epoch 5/20
1213/1213 [==============================] - 0s - loss: 0.1928
Epoch 6/20
1213/1213 [==============================] - 0s - loss: 0.1964
Epoch 7/20
1213/1213 [==============================] - 0s - loss: 0.1948
Epoch 8/20
1213/1213 [==============================] - 0s - loss: 0.1971
Epoch 9/20
1213/1213 [==============================] - 0s - loss: 0.1899
Epoch 10/20
1213/1213 [==============================] - 0s - loss: 0.1957
Epoch 11/20
1213/1213 [==============================] - 0s - loss: 0.1923
Epoch 12/20
1213/1213 [==============================] - 0s - loss: 0.1910
Epoch 13/20
1213/1213 [==============================] - 0s - loss: 0.2104
Epoch 14/20
1213/1213 [==============================] - 0s - loss: 0.1976
Epoch 15/20
1213/1213 [==============================] - 0s - loss: 0.1979
Epoch 16/20
1213/1213 [==============================] - 0s - loss: 0.2036
Epoch 17/20
1213/1213 [==============================] - 0s - loss: 0.2019
Epoch 18/20
1213/1213 [==============================] - 0s - loss: 0.1978
Epoch 19/20
1213/1213 [==============================] - 0s - loss: 0.1954
Epoch 20/20
1213/1213 [==============================] - 0s - loss: 0.1949
より具体的に質問に答えるために、エポックと損失の定義を以下に示します。
Epoch:すべてのtrainingデータに対するフルパス。
たとえば、上記のビューでは、1213個の観測値があります。エポックは、1213のすべての観測値のトレーニングパスを終了すると終了します。
Loss:モデルのトレーニング中に最小化を試みるスカラー値。損失が少ないほど、予測は真のラベルに近づきます。
これは通常、David Maustが上記で述べたように平均二乗誤差(MSE)、またはケラスでよく言われる Categorical Cross Entropy
Kerasモデルでフィットを実行することで期待できるのは、n個のエポックでの損失の減少です。あなたの損失は実際に増加しているため、トレーニングの実行はかなり異常です。このは、学習率が大きすぎるためである可能性があり、最適化をオーバーシュートする原因となります。
Jaycodeが述べたように、これは機械学習の一般的なユースケースであるため、目に見えないデータに対するモデルのパフォーマンスを確認する必要があります。
そのため、コンパイルメソッドには、次のようなメトリックのリストを含める必要があります。
model.compile(optimizer='rmsprop', loss='categorical_crossentropy', metrics=['accuracy'])
また、次のようなfitメソッド中の検証でモデルを実行します。
model.fit(data, labels, validation_split=0.2)
説明することはもっとたくさんありますが、うまくいけば、これで開始できます。
1つのエポックは、モデルがネットワーク内のすべてのノードを介してデータを実行し、最適な損失値に達するように重みを更新する準備ができたときに終了します。つまり、小さいほど良いです。あなたの場合、より高いエポックでより高い損失スコアがあるので、モデルは最初のエポックでより良いようです。
モデルが適切な相互検証方法を使用してテストされていないため、つまり、トレーニングデータに対してのみ評価されているため、実際にはまだはっきりとは分からないため、「そう」と言いました。
モデルを改善する方法:
SklearnのGridSearchCVとKerasを組み合わせることで、このプロセスを自動化できます。