Почему модель CNN пытается классифицировать цветных MNIST?Python

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Почему модель CNN пытается классифицировать цветных MNIST?

Сообщение Anonymous »

Я пытаюсь классифицировать цветные цифры MNIST с помощью базовой архитектуры CNN на Keras. Вот фрагмент кода, который окрашивает исходный набор данных в красный, зеленый или синий цвет.

Код: Выделить всё

def load_norm_data():
## load basic mnist
(x_train, y_train), (x_test, y_test) = keras.datasets.mnist.load_data()
train_images = np.zeros((*x_train.shape, 3)) # orig shape: (60 000, 28, 28, 1) -> rgb shape: (60 000, 28, 28, 3)
for num in range(x_train.shape[0]):
rgb = np.random.randint(3)
train_images[num, ..., rgb] = x_train[num]/255
return train_images, y_train

if __name__ == '__main__':
ims, labels = load_norm_data()
for num in range(10):
plt.subplot(2, 5, num+1)
plt.imshow(ims[num])
plt.axis('off')
что дает первые пару цифр:
[img]https://i. sstatic.net/T1gIV.png[/img]

Затем я пытаюсь классифицировать этот цветной набор данных в те же 10-значные классы MNIST, чтобы метки не менялись — и все же точность модели падает с 95% для от нецветного MNIST до 30–70% от цветного MNIST, что сильно зависит от инициализации веса... Ниже вы найдете архитектуру указанной модели:

Код: Выделить всё

model = keras.Sequential()
model.add(keras.layers.Conv2D(64, kernel_size=(3,3), padding='same'))
model.add(keras.layers.MaxPool2D(pool_size=(2,2)))
model.add(keras.layers.Conv2D(64, kernel_size=(3,3), padding='same'))
model.add(keras.layers.MaxPool2D(pool_size=(2,2), padding='same'))
model.add(keras.layers.Flatten())
model.add(keras.layers.Dense(10, activation='relu'))
model.add(keras.layers.Softmax())

input_shape = train_images.shape
model.build(input_shape)

model.compile(optimizer='rmsprop', loss='categorical_crossentropy', metrics=['accuracy'])
model.summary()

model.fit(train_images, train_numbers, batch_size=12, epochs=25)
Изначально я думал, что это падение производительности может быть связано с неравномерностью данных (например, представьте, что много троек в данных оказались зелеными, поэтому модель запоминает зеленый = 3). Итак, я проверил данные, показатели хорошие, а распределение RGB для каждого класса также составляет около 33% для каждого цвета. Я также проверил неправильно классифицированные изображения, чтобы увидеть, много ли там представителей определенного цвета или цифры, но, похоже, это тоже не так. В любом случае, после прочтения документации Keras и из-за того, что Conv2D заставляет вас передавать ему двумерный kernel_size, который, как я полагаю, таким образом работает на всех каналах входного изображения, модель должна здесь при классификации я не учитываю цвет.
Я что-то упускаю?

Подробнее здесь: https://stackoverflow.com/questions/729 ... ored-mnist
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Python»