Проект создает рекуррентную нейронную сеть (RNN) для генерации музыки. Модель обучена изучать закономерности в необработанных нотах в нотации ABC, которые генерируют музыку. Набор данных собирается из Kaggle и содержит нотацию песен ABC. Ссылка: https://www.kaggle.com/datasets/raj5287/abc-notation-of-tunes?datasetId=156963&sortBy=dateRun&tab=profile Текст в наборе данных сначала векторизуется для создания числового представления для поддержки таблицы поиска. Мы будем использовать несколько примеров последовательностей для обучения RNN с определенной длиной последовательности. Также будет целевая последовательность для предсказания следующего символа. Это будет реализовано с помощью пакетного метода, который преобразует этот поток индексов символов в последовательности желаемого размера. Создаваемая нами модель RNN будет основана на архитектуре LSTM и имеет инициализатор «glorot_uniform» и функцию активации «sigmoid», где мы будем использовать вектор состояния для хранения информации о временных отношениях между последовательными символами. Окончательный результат LSTM затем передается на полностью подключенный плотный слой, где мы выводим softmax для каждого символа в словаре, а затем извлекаем из этого распределения выборку для прогнозирования следующего символа.
Уровень 1: уровень внедрения для преобразования индексов в плотные векторы фиксированного размера внедрения.
Уровень 2: LSTM с количеством единиц rnn_units.
Уровень 3: плотный (полностью связный) уровень, который преобразует выходные данные LSTM в размер словаря.
Затем модель RNN обучается с использованием формы потери кроссэнтропии (потеря отрицательного логарифма правдоподобия), то есть потери разреженной_категориальной_кроссэнтропии, поскольку она использует целочисленные цели для задач категориальной классификации. Мы хотим вычислить потери, используя истинные цели (метки) и прогнозируемые цели (логиты). Гиперпараметры определены для настройки и оптимизации. Оптимизатор Адама используется в качестве оптимизатора для операции обучения. Модель обучается на 3000 итераций с размером пакета 10 и длиной последовательности 100. Модель обучается лучше, когда скорость обучения установлена на 1e-3. Для генерации музыки модель следует процедуре прогнозирования:
Шаг 1. Инициализируйте стартовую строку и состояние RNN и установите количество символов, которые мы хотим сгенерировать.
Шаг 2. Используйте начальную строку и состояние RNN, чтобы получить распределение вероятностей для следующего предсказанного символа.
Шаг 3: Выборка из полиномиального распределения для расчета индекса прогнозируемого персонажа. Этот предсказанный символ затем используется в качестве следующих входных данных модели.
Шаг 4: На каждом временном этапе обновленное состояние RNN возвращается в модель, так что теперь у нее больше контекста для создания следующего прогноза. После прогнозирования следующего символа обновленные состояния RNN снова передаются обратно в модель, и именно так она изучает зависимости последовательностей в данных, поскольку получает больше информации из предыдущих прогнозов.
Теперь модель генерирует песни с определенными пользователем параметрами «start_string» и «generation_length».