El proyecto construye una Red Neural Recurrente (RNN) para la generación de música. El modelo está entrenado para aprender los patrones de las partituras sin editar en notación ABC, lo que genera música. El conjunto de datos se recopila de kaggle y contiene notación ABC de canciones. Enlace: https://www.kaggle.com/datasets/raj5287/abc-notation-of-tunes?datasetId=156963&sortBy=dateRun&tab=profile El texto del conjunto de datos primero se vectoriza para crear una representación numérica para mantener una tabla de búsqueda. Usaremos algunas secuencias de ejemplo para entrenar el RNN con una longitud de secuencia definida. También habrá una secuencia objetivo para predecir el siguiente personaje. Esto se implementará utilizando el método por lotes que convertirá este flujo de índices de caracteres en secuencias del tamaño deseado. El modelo RNN que creamos se basará en la arquitectura LSTM y tiene un inicializador "glorot_uniform" y una función de activación "sigmoide", donde usaremos el vector de estado para mantener información sobre las relaciones temporales entre caracteres consecutivos. Luego, la salida final del LSTM se introduce en una capa densa completamente conectada donde generaremos un softmax sobre cada carácter en el vocabulario y luego tomaremos muestras de esta distribución para predecir el siguiente carácter.
Capa 1: capa de incrustación para transformar índices en vectores densos de un tamaño de incrustación fijo
Capa 2: LSTM con rnn_units número de unidades.
Capa 3: capa densa (totalmente conectada) que transforma la salida de LSTM en el tamaño del vocabulario.
Luego, el modelo RNN se entrena utilizando una forma de pérdida de entropía cruzada (pérdida de probabilidad logarítmica negativa), es decir, pérdida de entropía cruzada_categórica_dispersa, ya que utiliza objetivos enteros para tareas de clasificación categórica. Queremos calcular la pérdida utilizando los objetivos verdaderos (las etiquetas) y los objetivos previstos (los logits). Los hiperparámetros se definen para su configuración y optimización. El optimizador Adam se utiliza como optimizador para la operación de entrenamiento. El modelo está entrenado para 3000 iteraciones, con un tamaño de lote de 10 y una longitud de secuencia de 100. El modelo aprende mejor cuando la tasa de aprendizaje se establece en 1e-3. Para generar música, el modelo sigue un procedimiento de predicción:
Paso 1: Inicialice una cadena de inicio "semilla" y el estado RNN, y establezca la cantidad de caracteres que queremos generar.
Paso 2: utilice la cadena inicial y el estado RNN para obtener la distribución de probabilidad sobre el siguiente carácter predicho.
Paso 3: Muestra de la distribución multinomial para calcular el índice del carácter predicho. Este carácter predicho se utiliza luego como la siguiente entrada al modelo.
Paso 4: en cada paso de tiempo, el estado RNN actualizado se devuelve al modelo, de modo que ahora tenga más contexto para realizar la siguiente predicción. Después de predecir el siguiente carácter, los estados RNN actualizados se retroalimentan nuevamente al modelo, que es la forma en que aprende las dependencias de secuencia en los datos, a medida que obtiene más información de las predicciones anteriores.
Ahora, el modelo genera canciones con una "cadena_inicial" y una "longitud_generación" definidas por el usuario.