В этом проекте мы будем использовать набор данных 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)
Для получения лучших результатов вы можете попробовать увеличить количество эпох или настроить архитектуру.
📝 Сохраните этот рассказ в Журнале.
👩💻 Просыпайтесь каждое воскресное утро и слышите самые интересные истории недели в области технологий, ожидающие в вашем почтовом ящике. Прочтите информационный бюллетень« Примечательные в технологиях ».