istyukov_timofey_lab_7 is ready #303

Merged
Alexey merged 2 commits from istyukov_timofey_lab_7 into main 2024-01-17 10:44:34 +04:00
5 changed files with 93 additions and 0 deletions
Showing only changes of commit 0eba750454 - Show all commits

View File

@ -0,0 +1,93 @@
# Лабораторная работа №7. Рекуррентная нейронная сеть и задача генерации текста
## 12 вариант
___
### Задание:
Выбрать художественный текст на языке по варианту и обучить на нём рекуррентную
нейронную сеть для решения задачи генерации. Подобрать архитектуру и параметры
так, чтобы приблизиться к максимально осмысленному результату. Далее разбиться
на пары чётный-нечётный вариант, обменяться разработанными сетями и проверить,
как архитектура товарища справляется с вашим текстом. В завершении подобрать
компромиссную архитектуру, справляющуюся достаточно хорошо с обоими видами текстов.
### Вариант:
- Язык текста: **русский**
### Художественный текст:
- Отрывок из книги Ф.М. Достоевского — "Белые ночи" (в формате .txt)
___
### Запуск
- Запустить файл lab7.py
### Используемые технологии
- Язык программирования **Python**
- Среда разработки **PyCharm**
- Библиотеки:
* numpy
* keras
* os
### Описание программы
Здесь представлена модель глубокого обучения для генерации текста с помощью
библиотеки Keras и алгоритма LSTM. Чтобы построить модель генерации
художественного текста, требуются некоторые текстовые данные. В качестве набора
данных здесь используется отрывок из книги великого русского писателя-реалиста
в формате текстового файла.
**Шаги написания программы:**
1. **Предварительная обработка данных**
1. Перевод символов в нижний регистр
2. Формирование уникального набора использующихся в тексте символов
3. Преобразование текстовых данных в числовые значения
4. Создание последовательности символов (X - значений, Y - следующий символ)
5. Преобразование данных в массив логических значений
2. **Построение базовой модели**
1. Инициализация модели **Sequential**. это простой стек слоев,
с помощью которого нельзя представить произвольную модель.
2. Три слоя **LSTM** (по 200 единиц в каждом):
- В первом слое входная форма.
- Во втором слое параметр *return_sequences=True* для обработки тех же
последовательностей
- В третьем слое ничего лишнего
2. Три слоя **Dropout** с вероятностью 20% для проверки переобучения.
Dropout предполагает случайный кик нейронов из процесса обучения.
Он обеспечивает, чтобы нейронная сеть не стала слишком зависимой от
любого одного узла.
3. Один "плотный" слой **Dense** в конце, который даёт вывод символов.
Dense обрабатывает каждый элемент предыдущего слоя, выполняя матричное
перемножение этих элементов со своими весами.
4. Конфигурация модели для категориальной классификации.
3. **Обучение модели**
1. **epochs=50** (одна эпоха = один проход вперёд и один проход назад
всех обучающих примеров)
2. **batch_size=100** (количество обучающих примеров за один проход
вперёд/назад. Чем больше размер пакета, тем больше памяти лучше использовать.
4. **Сохранение модели** (во избежание повторного обучения и ради экономии времени)
5. **Генерация текста на основе сохранённой модели**
1. Загрузка модели
2. Выбор случайной стартовой точки в исходном тексте
3. Генерация назначенного количества символов
---
### Пример работы
*В ходе прогона программы было зафиксировано несколько результатов генерации
200 символов. Примеры приведены ниже.*
![Graphics](result_1.jpg)
![Graphics](result_2.jpg)
![Graphics](result_3.jpg)
![Graphics](result_4.jpg)
---
### Вывод
Итак, рекуррентная нейронная сеть справилась с задачей генерации текста.
Если говорить о качестве, то требуется более глубокое обучение и больше текста.
И тогда нейросеть сможет писать даже в стиле Достоевского. Но по времени это
слишком затратно. Однако в рамках лабораторной работы результат вышел приемлемый.

Binary file not shown.

After

Width:  |  Height:  |  Size: 17 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB