python - 如何迭代测试数据集并显示测试数据集中的图像,然后给出其预测

标签 python tensorflow deep-learning neural-network tensorflow2.0

我对 TensorFlow 比较陌生,所以我制作了一个模型,用于对不同类型的汽车图像进行预测。我已经从“tf.keras.utils.image_dataset_from_directory”函数制作了测试数据集。我使用 model.fit(test_dataset) 来获取预测。但我想要的是打印测试数据集中的图像,然后给出其预测。 (图像然后预测)。这样我就可以看到哪个图像映射到哪个预测。有办法做到这一点吗?

最佳答案

为了显示测试数据集的图像以及类的标签和名称,您可以显示每个图像,然后从 model.prdict() 获取标签,如果您有每个标签的名称,则显示每个类的名称如下:(我在下面的示例代码中使用了这个解释,得到了精度为 67% 的测试图像的结果):

import tensorflow_datasets as tfds
import matplotlib.pyplot as plt
import numpy as np
import tensorflow as tf

train, test = tfds.load(
    'cifar10',
    shuffle_files=True, 
    as_supervised=True, 
    split = ['train', 'test']
)
    
train = train.map(lambda x,y : (tf.cast(x, tf.float32) / 255.0, y) , num_parallel_calls=tf.data.AUTOTUNE)
test  = test.map(lambda x,y : (tf.cast(x, tf.float32) / 255.0, y) , num_parallel_calls=tf.data.AUTOTUNE)


train = train.batch(10).prefetch(tf.data.AUTOTUNE)
test = test.batch(10).prefetch(tf.data.AUTOTUNE)


model = tf.keras.Sequential([
  tf.keras.layers.Conv2D(16, 3, padding='same', activation='relu', input_shape=(32, 32, 3)),
  tf.keras.layers.MaxPooling2D(),
  tf.keras.layers.Conv2D(32, 3, padding='same', activation='relu'),
  tf.keras.layers.MaxPooling2D(),
  tf.keras.layers.Flatten(),
  tf.keras.layers.Dense(64, activation='relu'),
  tf.keras.layers.Dropout(0.4),
  tf.keras.layers.Dense(10)
])

model.compile(optimizer='adam', metrics=['accuracy'],
              loss=tf.keras.losses.SparseCategoricalCrossentropy(from_logits=True))


model.fit(train,epochs=10)


class_names = ['airplane', 'automobile', 'bird', 'cat', 'deer', 'dog', 'frog', 'horse', 'ship', 'truck']
image ,label = next(iter(test))
fig, axes = plt.subplots(2,5,figsize=(15,6))
for idx, axe in enumerate(axes.flatten()):
    axe.axis('off')
    y_pred = np.argmax(model.predict(image[idx][None,...]))
    axe.imshow(image[idx])
    axe.set_title(f'label: {y_pred}, predict : {class_names[y_pred]}')

输出:

Epoch 1/10
5000/5000 [==============================] - 43s 5ms/step - loss: 1.5802 - accuracy: 0.4197
Epoch 2/10
5000/5000 [==============================] - 17s 3ms/step - loss: 1.2857 - accuracy: 0.5396
Epoch 3/10
5000/5000 [==============================] - 17s 3ms/step - loss: 1.1738 - accuracy: 0.5824
Epoch 4/10
5000/5000 [==============================] - 17s 3ms/step - loss: 1.1138 - accuracy: 0.6031
Epoch 5/10
5000/5000 [==============================] - 18s 4ms/step - loss: 1.0666 - accuracy: 0.6181
Epoch 6/10
5000/5000 [==============================] - 19s 4ms/step - loss: 1.0243 - accuracy: 0.6338
Epoch 7/10
5000/5000 [==============================] - 18s 4ms/step - loss: 0.9942 - accuracy: 0.6428
Epoch 8/10
5000/5000 [==============================] - 18s 4ms/step - loss: 0.9672 - accuracy: 0.6519
Epoch 9/10
5000/5000 [==============================] - 18s 4ms/step - loss: 0.9428 - accuracy: 0.6605
Epoch 10/10
5000/5000 [==============================] - 18s 4ms/step - loss: 0.9236 - accuracy: 0.6640

enter image description here

关于python - 如何迭代测试数据集并显示测试数据集中的图像,然后给出其预测,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72597673/

相关文章:

Python 'timestamp' 无法转换为MySQL类型

python - TensorFlow Transform apply_buckets 的正确使用

android - 相同的 Tensorflow 模型在 Android 和 Python 上给出不同的结果

python - 如何使我的非极大值抑制实现更快?

machine-learning - 如何保证Caffe分割网络输出大小与输入相同?

Python 文件未找到错误

python - "blocking"这个词在编程中是什么意思?

python - 为什么我有 KeyError : 'val_acc' ?

Python、Pandas 从计算中添加列

python - 最小化 Tensorflow 中一个变量的函数