Рекуррентная нейронная сеть (RNN) — это класс нейронной сети, которая хорошо работает, когда вход/выход представляет собой последовательность. RNN могут использовать свое внутреннее состояние/память для обработки последовательностей входных данных.
Модели нейронных сетей бывают разных видов
- Один к одному: классификация изображений, при которой мы даем входное изображение, и оно возвращает класс, к которому принадлежит изображение.
- Один ко многим: субтитры к изображениям, где вводом является изображение, а выводом — предложение, описывающее изображение.
- Многие к одному: сентиментальный анализ, где вводом является твит, а выводом является класс, например положительный или отрицательный.
- Многие ко многим: модель последовательности для последовательности с архитектурой кодировщика — декодера: модель языкового перевода, в которой ввод — это предложение (скажем, на английском), а вывод — предложение на другом языке (скажем, на французском).
Есть два популярных варианта RNN.
Мы должны попробовать оба, чтобы увидеть, какой из них лучше подходит для проблемы, которую мы пытаемся решить.
В этом блоге я попытался сгенерировать новый исходный код с помощью LSTM. Вот шаги
Импорт необходимых пакетов
Затем установите EPOCH и размер пакета. Они должны быть правильно настроены.
На этапе предварительной обработки я загрузил исходный код Openssl с github и объединил все файлы .c в файл с именем «train.txt». Мне не хватало памяти, поэтому я просто взял 1/3 файлов Openssl. Мы можем улучшить этот код, чтобы загружать исходный код партиями. Мы должны создать список слов на этапе предварительной обработки, сохранить его в файл и прочитать файл.
Я использовал модель на основе персонажей. Мы также можем сделать модель на основе слов. Мы также можем использовать слой встраивания слов, который понадобится, когда у нас будут более сложные наборы задач.
Я использовал 2 слоя LSTM с Dropout 0,2 каждый и Dense в конце с softmax. Мы можем попробовать разные модели и сравнить.
Визуализируйте модель, как показано ниже.
Обучение на 10 эпох. Как видите, потери постепенно снижаются в каждую эпоху с 2,97 до 1,55.
Вот результат, который он сгенерировал. Мы дали ему случайную отправную точку
Как видите, программа проделала очень хорошую работу. Он вернул значения из функции на основе условия if и запустил другую функцию.
Вот код на гитхабе. Пожалуйста, попробуйте и посмотрите.
использованная литература
- https://en.wikipedia.org/wiki/Recurrent_neural_network
- https://www.tensorflow.org/tutorials/sequences/recurrent
- https://machinelearningmastery.com/text-generation-lstm-recurrent-neural-networks-python-keras/
- https://en.wikipedia.org/wiki/Long_short-term_memory
- https://en.wikipedia.org/wiki/Gated_recurrent_unit
Первоначально опубликовано на сайте meenavyas.wordpress.com 2 ноября 2018 г.