项目笔记(三)实验——尝试用循环卷积神经网络实现midi交响乐乐句分割

零、写在前面

现在来看,这是一次失败的实验,因为突然有新的想法,就先搁置下。但在开始新实验前,暂且先把失败的这个记录下来。
为了使用seq2seq模型进行“交响乐翻译”, 需要以乐句为单位的输入。人为标注效率太低,所以要做一个自动实现乐句分割的功能。

一、原理

这一神经网络的灵感来自trigger word detection,它将音频的频谱图输入至循环神经网络作为x,而y是1或者0:在触发词结束瞬间之后的n=50个时间步内y为1,其余为0。

神经网络的结构是这样的:最底层是对频谱图的1维卷积(可视为卷积核的高等于总高的卷积,即没有卷积核的换行),卷积后的结果输入至两层GRU循环神经网络。最后的输出因为目标y为0或1,所以使用sigmoid函数作为激活函数。
这里写图片描述

在本实验中,神经网络的架构基本不变,只是输出替换为交响乐midi文件的piano_roll(取消了乐器的标注,合并所有乐器在一个piano_roll矩阵中)。piano_roll是一个二位矩阵,两个维度分别为时间和音高。时间的单位为0.01,音高在0-128之间。矩阵每个位置上的数值代表了该音符的力度。

输出与之前的触发词检测类似,是手工标注的一维01数列,这里n=20。作为初步实验,只是用一首midi文件(贝多芬第七交响曲第四乐章)作为训练集。

另外,为了方便处理midi文件,我用了python的pretty_midi库。

二、代码

引入库文件:

import numpy as np
import pretty_midi
import matplotlib.pyplot as plt
import keras

处理输入与输出

file_name = 'Symphonie7_Opus92_Mvt4.mid'
pm = pretty_midi.PrettyMI
  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值