В этом проекте мы будем использовать набор данных CIFAR-10, который состоит из 10 классов.
Набор данных означает Канадский институт перспективных исследований (CIFAR). Набор данных состоит из 60 000 цветных изображений 32x32 и 6000 изображений каждого класса. Изображения имеют низкое разрешение (32x32).

Шаг 1.
Импортируйте необходимые библиотеки.

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn 

Разделитесь на тестирование и обучение.

from keras.datasets import cifar10
(X_train, y_train) , (X_test, y_test) = cifar10.load_data()

Давайте визуализируем набор данных.

Хотите прочитать эту историю позже? Сохраните в Журнале.

W_grid = 4
L_grid = 4
fig, axes = plt.subplots(L_grid, W_grid, figsize = (25, 25))
axes = axes.ravel()
n_training = len(X_train)
for i in np.arange(0, L_grid * W_grid):
 index = np.random.randint(0, n_training) # pick a random number
 axes[i].imshow(X_train[index])
 axes[i].set_title(y_train[index])
 axes[i].axis(‘off’)
 
plt.subplots_adjust(hspace = 0.4)

Следующий шаг - подготовка данных…

X_train = X_train.astype(‘float32’)
X_test = X_test.astype(‘float32’)
number_cat = 10

Используйте to_categorical

import keras
y_train = keras.utils.to_categorical(y_train, number_cat)
y_test = keras.utils.to_categorical(y_test, number_cat)
X_train = X_train/255
X_test = X_test/255
Input_shape = X_train.shape[1:]

Теперь самое интересное. Обучение модели!

Мы собираемся использовать CNN для этого проекта.

from keras.models import Sequential
from keras.layers import Conv2D, MaxPooling2D, AveragePooling2D, Dense, Flatten, Dropout
from keras.optimizers import Adam
from keras.callbacks import TensorBoard
cnn_model = Sequential()
cnn_model.add(Conv2D(filters = 64, kernel_size = (3,3), activation = ‘relu’, input_shape = Input_shape))
cnn_model.add(Conv2D(filters = 64, kernel_size = (3,3), activation = ‘relu’))
cnn_model.add(MaxPooling2D(2,2))
cnn_model.add(Dropout(0.4))
cnn_model.add(Conv2D(filters = 128, kernel_size = (3,3), activation = ‘relu’))
cnn_model.add(Conv2D(filters = 128, kernel_size = (3,3), activation = ‘relu’))
cnn_model.add(MaxPooling2D(2,2))
cnn_model.add(Dropout(0.4))
cnn_model.add(Flatten())
cnn_model.add(Dense(units = 1024, activation = ‘relu’))
cnn_model.add(Dense(units = 1024, activation = ‘relu’))
cnn_model.add(Dense(units = 10, activation = ‘softmax’))
cnn_model.compile(loss = ‘categorical_crossentropy’, optimizer = keras.optimizers.rmsprop(lr = 0.001), metrics = [‘accuracy’])

Мы установим batch_size равным 32, но вы можете выбрать свой собственный номер.

history = cnn_model.fit(X_train, y_train, batch_size = 32, epochs = 20, shuffle = True)

Оценка модели

evaluation = cnn_model.evaluate(X_test, y_test)
print(‘Test Accuracy: {}’.format(evaluation[1]))
predicted_classes = cnn_model.predict_classes(X_test) 
predicted_classes

Давай проверим!

y_test = y_test.argmax(1)

Для визуализации выполните следующее.

L = 7
W = 7
fig, axes = plt.subplots(L, W, figsize = (12, 12))
axes = axes.ravel()
for i in np.arange(0, L*W):
 axes[i].imshow(X_test[i])
 axes[i].set_title(‘Prediction = {}\n True = {}’.format(predicted_classes[i], y_test[i]))
 axes[i].axis(‘off’)
plt.subplots_adjust(wspace = 1)

Постройте тепловую карту

from sklearn.metrics import confusion_matrix
import seaborn as sns
cm = confusion_matrix(y_test, predicted_classes)
cm
plt.figure(figsize = (10, 10))
sns.heatmap(cm, annot = True)

Для получения лучших результатов вы можете попробовать увеличить количество эпох или настроить архитектуру.

📝 Сохраните этот рассказ в Журнале.

👩‍💻 Просыпайтесь каждое воскресное утро и слышите самые интересные истории недели в области технологий, ожидающие в вашем почтовом ящике. Прочтите информационный бюллетень« Примечательные в технологиях ».