python - 使用 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
请在上面帮忙
解决方案
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
。
推荐阅读
- python - 如何在连接字符串值时旋转 pandas DataFrame?
- node.js - 窗口未在 gatsby 开发环境中定义
- reactjs - 如何使用汇总实现带有代码分割的反应服务器端渲染?
- ionic-framework - Ionic Rest API 登录
- c# - 是否可以使用 SwashBuckle 和 Swagger UI 更改 HTML 标题
- c++ - CppCoreGuidlines R.33 为什么通过引用传递`unique_ptr`?
- java - 使用 Java High Level Rest Client 删除 Index Custom api
- microservices - 如何在具有多个值的环境变量的 kubernets 中传递秘密?
- r - 是否可以将年-周日期格式转换为一周的第一天?
- python - KivyMD NavigationDrawer 在多个屏幕上滑动