diff --git a/istyukov_timofey_lab_7/README.md b/istyukov_timofey_lab_7/README.md new file mode 100644 index 0000000..927fb02 --- /dev/null +++ b/istyukov_timofey_lab_7/README.md @@ -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) + +--- + +### Вывод +Итак, рекуррентная нейронная сеть справилась с задачей генерации текста. +Если говорить о качестве, то требуется более глубокое обучение и больше текста. +И тогда нейросеть сможет писать даже в стиле Достоевского. Но по времени это +слишком затратно. Однако в рамках лабораторной работы результат вышел приемлемый. \ No newline at end of file diff --git a/istyukov_timofey_lab_7/result_1.jpg b/istyukov_timofey_lab_7/result_1.jpg new file mode 100644 index 0000000..bedbacb Binary files /dev/null and b/istyukov_timofey_lab_7/result_1.jpg differ diff --git a/istyukov_timofey_lab_7/result_2.jpg b/istyukov_timofey_lab_7/result_2.jpg new file mode 100644 index 0000000..a127e3a Binary files /dev/null and b/istyukov_timofey_lab_7/result_2.jpg differ diff --git a/istyukov_timofey_lab_7/result_3.jpg b/istyukov_timofey_lab_7/result_3.jpg new file mode 100644 index 0000000..81febd3 Binary files /dev/null and b/istyukov_timofey_lab_7/result_3.jpg differ diff --git a/istyukov_timofey_lab_7/result_4.jpg b/istyukov_timofey_lab_7/result_4.jpg new file mode 100644 index 0000000..4ce7a8f Binary files /dev/null and b/istyukov_timofey_lab_7/result_4.jpg differ