首页 > 解决方案 > 使用测试数据集检查我的 Keras 模型的预测

问题描述

我想检查我的模型计算的预测是否正确。

我已经训练了我的模型并保存了它。我的数据集是使用 tf.keras.preprocessing.image_dataset_from_directory 创建的,如下所示:

ds_train = tf.keras.preprocessing.image_dataset_from_directory(
        'data/',
        labels = 'inferred',
        label_mode = 'categorical',
        color_mode = 'rgb',
        batch_size = batch_size,
        image_size = (img_height, img_width),
        shuffle = True,
        seed = 123,
        validation_split = 0.1,
        subset = 'training',
)

ds_validation = tf.keras.preprocessing.image_dataset_from_directory(
        'data/',
        labels = 'inferred',
        label_mode = 'categorical',
        color_mode = 'rgb',
        batch_size = batch_size,
        image_size = (img_height, img_width),
        shuffle = True,
        seed = 123,
        validation_split = 0.1,
        subset = 'validation',
)

由于我的模型正在运行并以 95.65% 的准确度进行评估:

Found 921 files belonging to 2 classes.
Using 829 files for training.
Found 921 files belonging to 2 classes.
Using 92 files for validation.
Epoch 1/5
104/104 - 12s - loss: 0.1335 - accuracy: 0.9867
Epoch 2/5
104/104 - 5s - loss: 0.1017 - accuracy: 0.9879
Epoch 3/5
104/104 - 5s - loss: 0.0207 - accuracy: 0.9952
Epoch 4/5
104/104 - 5s - loss: 0.0603 - accuracy: 0.9879
Epoch 5/5
104/104 - 5s - loss: 0.0127 - accuracy: 0.9964
12/12 - 0s - loss: 0.2097 - accuracy: 0.9565

我以与创建训练和验证数据集相同的方式创建了一个 test_dataset。

ds_test = tf.keras.preprocessing.image_dataset_from_directory(
        'test/',
        labels = 'inferred',
        label_mode = 'categorical',
        color_mode = 'rgb',
        batch_size = batch_size,
        image_size = (img_height, img_width),
        shuffle = True,
        seed = 123,
)

我知道想使用 model.predict() 预测整个 test_dataset。我的数据存储在子文件夹中,如下所示:

---test/
  ---label1/
  ---label2/

我设法恢复了所有图像的所有预测,但我无法检查预测是否正确。有没有办法将预测图像的标签存储在列表中?我想使用这样的东西:

for i in test_dataset :
      list_labels = test_dataset.class_names(i)
      predictions = model.predict(test_dataset)
      predictions = np.argmax(predictions, axis=1)

所以我可以检查预测输出并将预测与标签联系起来。此外,我不知道为什么,但我无法使用 like (x_train, y_train) = mnist.load_data 获得标签:

# It is not working
(x_test, y_test) = test_dataset

标签: pythontensorflowmachine-learningkerasclassification

解决方案


推荐阅读