[AI声乐] AI 音乐训练 Python源码

查看:526 |回复:1 | 2025-3-4 10:36:30

您需要 登录 才可以下载或查看,没有账号?注册

x
开源下载
AI MakeMusic_MIDI.rar (118.03 KB)
训练 train.py

  1. # -*- coding: UTF-8 -*-

  2. """
  3. 训练神经网络,将参数(Weight)存入 HDF5 文件
  4. """

  5. import numpy as np
  6. import tensorflow as tf

  7. from utils import *
  8. from network import *

  9. # 训练神经网络
  10. def train():
  11.     notes = get_notes()

  12.     # 得到所有不重复(因为用了set)的音调数目
  13.     num_pitch = len(set(notes))

  14.     network_input, network_output = prepare_sequences(notes, num_pitch)

  15.     model = network_model(network_input, num_pitch)

  16.     filepath = "weights-{epoch:02d}-{loss:.4f}.hdf5"
  17.     checkpoint = tf.keras.callbacks.ModelCheckpoint(
  18.         filepath,
  19.         monitor='loss',
  20.         verbose=0,
  21.         save_best_only=True,
  22.         mode='min'
  23.     )
  24.     callbacks_list = [checkpoint]

  25.     model.fit(network_input, network_output, epochs=100, batch_size=64, callbacks=callbacks_list)

  26. def prepare_sequences(notes, num_pitch):
  27.     """
  28.     为神经网络准备好供训练的序列
  29.     """
  30.     sequence_length = 100  # 序列长度

  31.     # 得到所有音调的名字
  32.     pitch_names = sorted(set(item for item in notes))

  33.     # 创建一个字典,用于映射 音调 和 整数
  34.     pitch_to_int = dict((pitch, num) for num, pitch in enumerate(pitch_names))

  35.     network_input = []
  36.     network_output = []

  37.     # 创建输入序列,以及对应的输出序列
  38.     for i in range(0, len(notes) - sequence_length, 1):
  39.         sequence_in = notes[i:i + sequence_length]
  40.         sequence_out = notes[i + sequence_length]
  41.         network_input.append([pitch_to_int[char] for char in sequence_in])
  42.         network_output.append(pitch_to_int[sequence_out])

  43.     n_patterns = len(network_input)

  44.     # 将输入的形状转换成 LSTM 模型可以接受的
  45.     network_input = np.reshape(network_input, (n_patterns, sequence_length, 1))

  46.     # 将输入标准化
  47.     network_input = network_input / float(num_pitch)

  48.     # 转换成 {0, 1} 组成的布尔矩阵,为了配合 categorical_crossentropy 误差算法使用
  49.     network_output = tf.keras.utils.to_categorical(network_output)

  50.     return (network_input, network_output)

  51. if __name__ == '__main__':
  52.     train()
点击此处复制文本


Cap_03-04_10-36-16.jpg

2025-3-4 10:36:30  
 赞 赞 0

使用道具 登录

1个回答,把该问题分享到群,邀请大神一起回答。
2#
回复 收起回复
2025-3-6 11:19:39   回复
 赞 赞 0

使用道具 登录

CG 游戏行业专业问题

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表