Tensorflow模型。评估得出的结果与训练所得结果不同

时间:2020-09-24 15:26:53

标签: python tensorflow machine-learning keras

我正在使用tensorflow进行多类分类

我通过以下方式加载训练数据集和验证数据集

train_ds = tf.keras.preprocessing.image_dataset_from_directory(
  data_dir,
  validation_split=0.2,
  subset="training",
  shuffle=True,
  seed=123,
  image_size=(img_height, img_width),
  batch_size=batch_size)

val_ds = tf.keras.preprocessing.image_dataset_from_directory(
  data_dir,
  validation_split=0.2,
  subset="validation",
  shuffle=True,
  seed=123,
  image_size=(img_height, img_width),
  batch_size=batch_size)

然后当我使用model.fit()训练模型时

history = model.fit(
  train_ds,
  validation_data=val_ds,
  epochs=epochs,
  shuffle=True
)

我得到的验证准确率约为95%。

但是当我加载相同的验证集并使用model.evaluate()

model.evaluate(val_ds)

我的准确率很低(大约10%)。

为什么我会得到如此不同的结果?我使用了model.evaluate函数不正确吗?

注意:在model.compile()中,我指定了以下内容, 优化器-亚当, 损耗-SparseCategoricalCrossentropy, 指标-准确性

Model.evaluate()输出

41/41 [==============================] - 5s 118ms/step - loss: 0.3037 - accuracy: 0.1032
Test Loss -  0.3036555051803589
Test Acc -  0.10315627604722977

最近三个时期的Model.fit()输出

Epoch 8/10
41/41 [==============================] - 3s 80ms/step - loss: 0.6094 - accuracy: 0.8861 - val_loss: 0.4489 - val_accuracy: 0.9483
Epoch 9/10
41/41 [==============================] - 3s 80ms/step - loss: 0.5377 - accuracy: 0.8953 - val_loss: 0.3868 - val_accuracy: 0.9554
Epoch 10/10
41/41 [==============================] - 3s 80ms/step - loss: 0.4663 - accuracy: 0.9092 - val_loss: 0.3404 - val_accuracy: 0.9590

1 个答案:

答案 0 :(得分:0)

尝试将您的模型保存为 .h5 而不是 .tf - 这在 Keras 2.4.0 和 tensorflow 2.4.0 中对我有用

相关问题