лабы / отчет 1 нейронные сети
.docx
ФЕДЕРАЛЬНОЕ
АГЕНСТВО ВОЗДУШНОГО ТРАНСПОРТА
(РОСАВИАЦИЯ)
ФЕДЕРАЛЬНОЕ ГОСУДАРСТВЕННОЕ БЮДЖЕТНОЕ ОБРАЗОВАТЕЛЬНОЕ УЧРЕЖДЕНИЕ ВЫСШЕГО ОБРАЗОВАНИЯ
«МОСКОВСКИЙ ГОСУДАРСТВЕННЫЙ ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ ГРАЖДАНСКОЙ АВИАЦИИ» (МГТУ ГА)
Кафедра вычислительных машин, комплексов, сетей и систем.
Лабораторная работа защищена с оценкой ____________________
____________________
(подпись преподавателя, дата)
ЛАБОРАТОРНАЯ РАБОТА №1
по дисциплине «Методы машинного обучения и нейронные сети».
Тема: «Построение модели нейронной сети для распознавания рукописных цифр.»
Выполнила студентка группы ИС2-1
Магальник Екатерина Борисовна
Руководитель: Романчева Нина Ивановна
МОСКВА – 2024
Цель работы: написать нейронную сеть, которая на представленном датасете рукописных цифр научится определять, что за цифра была написана.
В данной лабораторной работе используются библиотеки TensorFlow и Keras для распознавания рукописных цифр из знаменитый датасета MNIST. Датасет MNIST содержит 70 000 изображений рукописных цифр, каждое из которых представляет собой черно-белое изображение размером 28x28 пикселей. Он разделен на две части: 60 000 образцов для обучения и 10 000 для тестирования модели. Датасет загружается напрямую через библиотеку Keras, поэтому не требуется установка дополнительных файлов. Данные уже разделены на обучающую и тестовую выборки, что позволяет нам сосредоточиться на создании и обучении модели.
После загрузки и нормализации данных пришло время создать модель. Мы используем Sequential API из Keras для построения модели. Наша нейронная сеть будет состоять из входного слоя, который "выпрямляет" изображения из 2D в вектор, двух скрытых слоев с 128 и 64 нейронами соответственно и функцией активации ReLU, и выходного слоя с 10 нейронами (по количеству классов цифр) и функцией активации softmax для получения вероятностей классов.
Обучение модели — это процесс, в котором модель учится распознавать правильные паттерны в данных. В нашем случае мы обучаем ее распознавать рукописные цифры. Запустим обучение, используя метод fit, и посмотрим на результаты после 20 эпох.
Листинг:
import tensorflow as tf from tensorflow.keras.datasets import mnist from tensorflow.keras.models import Sequential from tensorflow.keras.layers import Dense, Flatten from tensorflow.keras.utils import to_categorical (train_images, train_labels), (test_images, test_labels) = mnist.load_data() train_images = train_images / 255.0 test_images = test_images / 255.0 train_labels = to_categorical(train_labels) test_labels = to_categorical(test_labels) model = Sequential([ Flatten(input_shape=(28, 28)), Dense(128, activation='relu'), Dense(64, activation='relu'), Dense(10, activation='softmax') ]) model.compile(optimizer='adam', loss='categorical_crossentropy', metrics=['accuracy']) model.fit(train_images, # данные для обучения train_labels, # epochs=20, # кол-во эпох обучения validation_data=(test_images, test_labels)) # данные для проверки model.save('mnist_model.keras')
val_accuracy = [0.9646, 0.9725, 0.9784, 0.9758, 0.9725, 0.9763, 0.9787, 0.9793, 0.9803, 0.9778, 0.9784, 0.9786, 0.9793, 0.9705, 0.9826, 0.9781, 0.9793, 0.9815, 0.9761, 0.9770] val_loss = [0.1158, 0.0921, 0.0734, 0.0791, 0.0889, 0.0817, 0.0745, 0.0760, 0.0793, 0.0957, 0.0885, 0.0922, 0.0884, 0.1455, 0.0913, 0.1116, 0.1134, 0.1044, 0.1366, 0.1306] fig, axes = plt.subplots(1, 1) axes.plot(val_accuracy, val_loss) axes.set_xlabel("accuracy") axes.set_ylabel("loss") plt.show()
Результат работы программы:
Можно заметить, что с каждой новой эпохой число потерь уменьшается, а точность увеличивается.
График зависимости потерь от точности:
Вывод: в ходе данной лабораторной работы были изучены библиотеки TensorFlow и Keras, датасет рукописных цифр MNIST. Была написана нейронная сеть, которая обучалась на данном датасете, увеличивая точность и уменьшая потери.
