我正在设计一个神经网络来尝试生成音乐。该神经网络将是两层的LSTM(长期短期记忆)。
我希望将音乐编码为多种热门格式以进行训练,即如果正在播放该音符,则为1;如果未播放该音符,则为0。
以下是此数据的摘要:
0000000000000000000000000000000000000000000000000001000100100001000000000000000000000000
0000000000000000000000000000000000000000000000000001000100100001000000000000000000000000
0000000000000000000000000000000000000000000000000001000100100001000000000000000000000000
0000000000000000000000000000000000000000000000000001000100100001000000000000000000000000
0000000000000000000000000000000000000000000000000001000100100001000000000000000000000000
0000000000000000000000000000000000000000000000000011010100100001010000000000000000000000
有88列代表88个音符,每个现在代表一个新的节拍。输出将是字符级别。
我只是想知道既然词汇表中只有2个字符,下一个0的概率是否总是比下一个1的概率高?
我知道对于一个大词汇量,需要一个大训练集,但是我只有一个小词汇量。我有229个文件,对应大约50,000行文本。这足以防止输出全为0吗?
另外,最好有88个节点,每个音符1个节点,或者一次只有1个节点一个字符?
提前致谢
最佳答案
只要您的数据集不偏向“单词”之一就可以使用少量词汇。
至于“最好有88个节点,每个音符1个,还是一次仅1个字符,一个字符?”,每个时间步长都表示为88个字符。每个角色都是该时间步的一个特征。您的LSTM应该在下一个时间步输出,因此您应该有88个节点。每个节点应输出该节点在该时间步中存在的概率。
最后,由于您正在构建Char-RNN,因此我强烈建议使用abc notation表示数据。 ABC表示法中的歌曲如下所示:
X:1
T:Speed the Plough
M:4/4
C:Trad.
K:G
|:GABc dedB|dedB dedB|c2ec B2dB|c2A2 A2BA|
GABc dedB|dedB dedB|c2ec B2dB|A2F2 G4:|
|:g2gf gdBd|g2f2 e2d2|c2ec B2dB|c2A2 A2df|
g2gf g2Bd|g2f2 e2d2|c2ec B2dB|A2F2 G4:|
这对于Char-RNN来说是完美的,因为它将每首歌曲表示为一组字符,并且您可以运行从MIDI到ABC的转换,反之亦然。您要做的就是训练模型以预测此序列中的下一个字符,而不是处理88个输出节点。
关于machine-learning - 神经网络的少量词汇可以吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/54581652/