首页 > 解决方案 > 使用 matplotlib.pylot.imshow() 从对象的类(例如 1-SHIRTS、2-SHOES 等)中获取相应图像的代码

问题描述

如下所示,我的模型只接受了 1500 张图像的训练(不包括 0.2 个验证数据),但我的 FASHION_MNIST 训练数据有 60000 张图像。任何人都可以帮忙吗?修改后的问题:需要使用 matplotlib.pylot.imshow() 从对象类(例如 1-SHIRTS、2-SHOES 等)中获取相应图像的代码

我正在使用谷歌 colab 笔记本

import tensorflow as tf
import numpy as np
import matplotlib.pyplot as plt
from tensorflow.keras.layers import Conv2D, Dense, Flatten, Dropout, Input
from tensorflow.keras.models import Model

fashion_mnist = tf.keras.datasets.fashion_mnist
(train_images, train_labels),(test_images, test_labels) = fashion_mnist.load_data()

train_images = train_images/255.0
test_images = test_images/255.0

train_images = train_images.reshape(len(train_images),28,28,1)
test_images = test_images.reshape(len(test_images),28,28,1)

K = len(set(train_labels))
train_images.shape

i = Input(shape=train_images[0].shape)
x = Conv2D(32, (3,3),strides=2, activation='relu')(i)
x = Conv2D(64, (3,3),strides=2, activation='relu')(x)
x = Flatten()(x)
x = Dense(64, activation='relu')(x)
x= Dense(K, activation='softmax')(x)
model = Model(i,x)

model.compile(optimizer='adam',
              loss = 'sparse_categorical_crossentropy',
              metrics=['accuracy'])
r = model.fit(train_images, train_labels, epochs=10, validation_split=0.2)

Epoch 1/10
1500/1500 [==============================] - 15s 10ms/step - loss: 0.4759 - accuracy: 0.8301 - val_loss: 0.3751 - val_accuracy: 0.8647
Epoch 2/10
1500/1500 [==============================] - 15s 10ms/step - loss: 0.3243 - accuracy: 0.8812 - val_loss: 0.3257 - val_accuracy: 0.8793
Epoch 3/10
1500/1500 [==============================] - 15s 10ms/step - loss: 0.2759 - accuracy: 0.8974 - val_loss: 0.2842 - val_accuracy: 0.8982
Epoch 4/10
1500/1500 [==============================] - 15s 10ms/step - loss: 0.2426 - accuracy: 0.9094 - val_loss: 0.2796 - val_accuracy: 0.8934
Epoch 5/10
1500/1500 [==============================] - 15s 10ms/step - loss: 0.2136 - accuracy: 0.9209 - val_loss: 0.2730 - val_accuracy: 0.9007
Epoch 6/10
1500/1500 [==============================] - 15s 10ms/step - loss: 0.1902 - accuracy: 0.9286 - val_loss: 0.2614 - val_accuracy: 0.9039
Epoch 7/10
1500/1500 [==============================] - 15s 10ms/step - loss: 0.1672 - accuracy: 0.9378 - val_loss: 0.2660 - val_accuracy: 0.9063
Epoch 8/10
1500/1500 [==============================] - 15s 10ms/step - loss: 0.1451 - accuracy: 0.9467 - val_loss: 0.2773 - val_accuracy: 0.9082
Epoch 9/10
1500/1500 [==============================] - 15s 10ms/step - loss: 0.1279 - accuracy: 0.9526 - val_loss: 0.2956 - val_accuracy: 0.9013
Epoch 10/10
1500/1500 [==============================] - 15s 10ms/step - loss: 0.1121 - accuracy: 0.9586 - val_loss: 0.3099 - val_accuracy: 0.9034

请在上面帮忙

标签: pythontensorflowkerasdeep-learning

解决方案


Keras model.fit接收作为参数批量大小steps_per_epoch批量大小定义模型在更新权重之前“查看”的样本数量。 Steps_per_epoch定义“在宣布一个时期完成并开始下一个时期之前的步骤数(样本批次)”

批量大小,如果未指定,默认设置为 32。这就是为什么数字“1500”出现在火车上的原因。考虑到您的验证拆分,您有 48k 图像用于训练,除以 32 生成 1500。放松,您的模型正在寻找您所有的火车图像!

如果你想在那里看到48k,你可以试试

r = model.fit(train_images, train_labels, batch_size=1, epochs=10, validation_split=0.2)

输出:

Epoch 1/10
 4013/48000 [=>............................] - ETA: 1:28 - loss: 0.7459 - accuracy: 0.7207

因为您可以绘制按课程获取的火车图像,您可以这样做

from matplotlib import pyplot as plt
import numpy as np

interesting_class = 0
index = np.where(train_labels == interesting_class)
plt.imshow(train_images[index[0][0]], cmap=plt.get_cmap('gray'))

您也可以index[0][N]获取第 N 个图像interesting_class


推荐阅读