Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

лабы / отчет 1 нейронные сети

.docx
Скачиваний:
0
Добавлен:
11.02.2026
Размер:
331.2 Кб
Скачать

ФЕДЕРАЛЬНОЕ АГЕНСТВО ВОЗДУШНОГО ТРАНСПОРТА

(РОСАВИАЦИЯ)

ФЕДЕРАЛЬНОЕ ГОСУДАРСТВЕННОЕ БЮДЖЕТНОЕ ОБРАЗОВАТЕЛЬНОЕ УЧРЕЖДЕНИЕ ВЫСШЕГО ОБРАЗОВАНИЯ

«МОСКОВСКИЙ ГОСУДАРСТВЕННЫЙ ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ ГРАЖДАНСКОЙ АВИАЦИИ» (МГТУ ГА)

Кафедра вычислительных машин, комплексов, сетей и систем.

Лабораторная работа защищена с оценкой ____________________

____________________

(подпись преподавателя, дата)

ЛАБОРАТОРНАЯ РАБОТА №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. Была написана нейронная сеть, которая обучалась на данном датасете, увеличивая точность и уменьшая потери.