Рекуррентная нейронная сеть (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 и запустил другую функцию.

Вот код на гитхабе. Пожалуйста, попробуйте и посмотрите.

использованная литература

Первоначально опубликовано на сайте meenavyas.wordpress.com 2 ноября 2018 г.