Код для извлечения соответствующих изображений из классов (например, 1-РУБАШКИ, 2-ОБУВЬ и т. Д. c) объектов с использованием matplotlib.pylot.imshow () - PullRequest
0 голосов
/ 23 апреля 2020

Как показано ниже, моя модель обучается только на 1500 изображениях (исключая 0.2 validation_data), но мои данные поезда FASHION_MNIST имеют 60000 изображений. Кто-нибудь может помочь? Модифицированный вопрос: нужен код для извлечения соответствующих изображений из классов объектов (например, 1-РУБАШКИ, 2-ОБУВИ и т. Д. c) с использованием matplotlib.pylot.imshow ()

Я использую ноутбук Google 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

Пожалуйста, помогите выше

1 Ответ

0 голосов
/ 23 апреля 2020

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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...