web-dev-qa-db-ja.com

ケラを使用してモデルの精度を取得するにはどうすればよいですか?

(数時間実行されていた)モデルをフィッティングした後、次のコードで精度を求めました。

train_loss=hist.history['loss']
val_loss=hist.history['val_loss']
train_acc=hist.history['acc']
val_acc=hist.history['val_acc']
xc=range(nb_Epoch)

トレーニングされたモデルのエラーが発生しました。これは、使用していた非推奨のメソッドが原因です。

---------------------------------------------------------------------------
KeyError                                  Traceback (most recent call last)
<ipython-input-233-081ed5e89aa4> in <module>()
      3 train_loss=hist.history['loss']
      4 val_loss=hist.history['val_loss']
----> 5 train_acc=hist.history['acc']
      6 val_acc=hist.history['val_acc']
      7 xc=range(nb_Epoch)

KeyError: 'acc'

精度を読み取る前にモデルを適合させるために使用したコードは次のとおりです。

hist = model.fit(X_train, Y_train, batch_size=batch_size, nb_Epoch=nb_Epoch,
            verbose=1, validation_data=(X_test, Y_test))


hist = model.fit(X_train, Y_train, batch_size=batch_size, nb_Epoch=nb_Epoch, 
            verbose=1, validation_split=0.2)

これを実行すると、この出力が生成されます。

Epoch 1/20
237/237 [==============================] - 104s 440ms/step - loss: 6.2802 - val_loss: 2.4209
    .....
    .....
    .....
Epoch 19/20
    189/189 [==============================] - 91s 480ms/step - loss: 0.0590 - val_loss: 0.2193
    Epoch 20/20
    189/189 [==============================] - 85s 451ms/step - loss: 0.0201 - val_loss: 0.2312

非推奨のメソッドと引数を実行していることに気付きました。

では、再度適合させる必要がなく、数時間待つことなく、精度とval_accuracyをどのように読み取ることができますか? train_acc=hist.history['acc']train_acc=hist.history['accuracy']に置き換えようとしましたが、役に立ちませんでした。

11
ZelelB

モデルのコンパイル時に、メトリックとして「acc」を追加しなかった可能性があります。

model.compile(optimizer=..., loss=..., metrics=['accuracy',...])

再度トレーニングすることなく、データからメトリックと損失を取得できます。

model.evaluate(X, Y)
4
Daniel Möller

tensorflow==2.0.0で試してみました。結果は次のとおりです。

次のようなトレーニングコールがあるとします。

history = model.fit(train_data, train_labels, epochs=100,
                    validation_data=(test_images, test_labels))

上記の呼び出しの最終的な精度は、次のように読み取ることができます。

history.history['accuracy']

辞書全体history.historyを印刷すると、含まれているすべての値の概要がわかります。次のような行ですべての値が報告されていることがわかります。

7570/7570 [==============================] - 42s 6ms/sample - loss: 1.1612 - accuracy: 0.5715 - val_loss: 0.5541 - val_accuracy: 0.8300

その辞書から読み取ることができます。

完全を期すために、次のようにモデルを作成しました。

model.compile(optimizer=tf.optimizers.Adam(learning_rate=0.0001,
                                       beta_1=0.9,
                                       beta_2=0.999,
                                       epsilon=1e-07,
                                       amsgrad=False,
                                       name='Adam'
                                       ),
          loss='sparse_categorical_crossentropy',
          metrics=['accuracy']
0
Daniel B.
  1. モデルをコンパイルするときに、メトリック= ['accuracy']を追加します

  2. 単に最後のエポックの精度を取得します。 hist.history.get( 'acc')[-1]

  3. 私が実際に行うことは、GridSearchCVを使用してから、best_score_パラメータを取得して最良のメトリックを出力することです

これが役立つかどうか教えてください

0
user1906450