- •Санкт-Петербург 2024
- •Часть 1. В начале импортируются необходимые для работы библиотеки, большая часть из которых наборы данных и различные виды слоёв Keras для описания структуры нейросети.
- •Часть 2. Определение предложенных классов из набора cifar-10. Сверточная нс.
- •Приложение а. Подготовка к работе. Эксперимент 1.
- •Приложение г. Эксперимент 4.
- •Приложение д. Эксперимент 5.
- •Приложение е. Эксперимент 6 и сравнение результатов.
- •Приложение ё. Часть 2 – распознавание изображений из набора cifar-10
Приложение ё. Часть 2 – распознавание изображений из набора cifar-10
from keras.datasets import cifar10
# Загрузка тренировочного и валидационного набора
(x_train, y_train), (x_test, y_test) = cifar10.load_data()
# Нормализация значений в диапахоне от 0 до 1
x_train = x_train.astype('float32') / 255.0
x_test = x_test.astype('float32') / 255.0
# Преобразование данных
y_train = to_categorical(y_train, 10)
y_test = to_categorical(y_test, 10)
# Создание CNN
model_7 = Sequential()
model_7.add(Conv2D(32, kernel_size=(3, 3), activation='relu', input_shape=(32, 32, 3)))
model_7.add(MaxPooling2D(pool_size=(2, 2)))
model_7.add(Conv2D(64, kernel_size=(3, 3), activation='relu'))
model_7.add(MaxPooling2D(pool_size=(2, 2)))
model_7.add(Flatten())
model_7.add(Dense(128, activation='relu'))
model_7.add(Dropout(0.5))
model_7.add(Dense(10, activation='softmax'))
model_7.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy'])
# Обучение
history_7 = model_7.fit(x_train, y_train, batch_size=128, epochs=40, validation_data=(x_test, y_test))
# Оценка потерь и точности модели
loss, accuracy = model_7.evaluate(x_test, y_test)
print("Test Loss:", loss)
print("Test Accuracy:", accuracy)
num_images = 10
random_indices = np.random.choice(len(x_test), num_images, replace=False)
images = x_test[random_indices]
labels = y_test[random_indices]
# Выполнение предсказания
predictions = model_7.predict(images)
names = ["Самолет", "Машина","Птица","Кошка","Олень","Собака","Жаб","Лошадь","Корабль","Грузовик"]
# Отображение классов и предсказаний для них
plt.figure(figsize=(12, 6))
for i in range(num_images):
plt.subplot(2, 5, i+1)
plt.imshow(images[i])
plt.axis('off')
predicted_label = np.argmax(predictions[i])
true_label = np.argmax(labels[i])
plt.title(f"Ожидание: {names[predicted_label]}\nРеальность: {names[true_label]}", fontsize=10)
plt.show()
plt.figure(figsize=(10, 5))
plt.plot(history_7.history['loss'], label='loss')
plt.plot(history_7.history['val_loss'], label='val_loss')
plt.title('Потери')
plt.xlabel('Эпохи')
plt.ylabel('Потери')
plt.legend()
plt.grid(True)
plt.show()
# Plot the accuracy curve
plt.figure(figsize=(10, 5))
plt.plot(history_7.history['accuracy'], label='accuracy')
plt.plot(history_7.history['val_accuracy'], label='val_accuracy')
plt.title('Точность')
plt.xlabel('Эпохи')
plt.ylabel('Точность')
plt.legend()
plt.grid(True)
plt.show()
