keras tenorflow2 получить результаты для тренировочных данных - PullRequest
2 голосов
/ 03 марта 2020

В керасе мы можем обучить модель, используя команду fit, а затем использовать predict.

Dcnn=model.fit(x_train, y_train, epochs=5, batch_size=32)
model.predict(test_dataset,verbose=True)

при использовании метода fit мы получаем результаты точности, как показано ниже. Допустим, после 5 эпох мы получили точность 98,62% на тренировочных данных. Теперь, если мы используем model.predict(x_train,verbose=True), получим ли мы точно такую ​​же точность и точно такие же прогнозы для каждого наблюдения, как показано в результате метода соответствия? если нет, то почему?

Epoch 5/5
61/61 - 11s - loss: 0.0320 - tp: 1602.0000 - fp: 18.0000 - tn: 321.0000 - fn: 9.0000 - accuracy: 0.9862 

update1

Я обновил команды, как показано ниже Dcnn.fit(train_dataset, epochs=NB_EPOCHS, verbose=2,validation_data=test_dataset)

и получил следующие результаты

Epoch 5/5

61/61 - 11s - loss: 0.0320 - tp: 1602.0000 - fp: 18.0000 - tn: 321.0000 - fn: 9.0000 - accuracy: 0.9862 - precision: 0.9889 - recall: 0.9944 - auc: 0.9990 - val_loss: 0.9760 - val_tp: 161.0000 - val_fp: 22.0000 - val_tn: 9.0000 - val_fn: 0.0000e+00 - val_accuracy: 0.8854 - val_precision: 0.8798 - val_recall: 1.0000 - val_auc: 0.7169

Теперь, если я попробую model.predict(test_dataset,verbose=True) Я получаю точность 88,54% - то же, что и результат метода подгонки.

Если я выполню model.predict(train_dataset,verbose=True), получу ли я точность 98,62%? если нет, то почему?

1 Ответ

1 голос
/ 03 марта 2020

При вызове fit() модель все еще тренируется, и результаты не точны. Вызов predict() точен, так как модель прошла обучение.

Вы не можете видеть вероятности для классов, использующих fit. Это связано с тем, что веса меняются после каждой партии на основе вероятностей. Это означает, что от партии к другой у вас разные веса, и, как таковые, вы получите разные ответы даже на одни и те же данные.

Чтобы получить реальные вероятности, вы можете использовать predict(). Прогнозирование и подгонка не будут возвращать одинаковые вероятности, поскольку predict возвращает для всего набора, тогда как fit является средним значением для всех партий (с разным весом между партиями).

Кроме того, вы можете в замешательстве вызов model.fit() возвращает объект History, который содержит значения потерь и точности и тому подобное. Вызов Dcnn.predict() выдаст ошибку, так как объекты History не имеют атрибута "ести ". model.predict() должен использоваться для получения прогнозов, которые, в свою очередь, могут использоваться для вычисления вероятностей.

Веса модели сохраняются в самом экземпляре, так что после вызова fit() весовые коэффициенты изменяются и сохраняется автоматически моделью.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...