我正在设计一个神经网络来尝试产生音乐。该神经网络将是一个两层的LSTM(长期短期记忆)。 我希望将音乐编码为多种热门格式以进行训练,即如果正在播放该音符,则为1;如果未播放该音符,则为0。 以下是此数据的摘要:
scanf("%s",string[i]);
共有88列,代表88个音符,每个现在代表一个新的节拍。输出将是字符级别。
我只是想知道既然词汇表中只有2个字符,那么下一个总是的0概率是否会比下一个1的概率高? 我知道对于大词汇量来说,需要大量的培训,但是我只有一小部分词汇。我有229个文件,对应于大约50,000行文本。这足以防止输出全为0吗?
还有,最好有88个节点,每个音符1个节点,或者一次只有1个节点一个字符?
预先感谢
答案 0 :(得分: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个输出节点。