【问题标题】:Is a small vocabulary for Neural Nets ok?神经网络的小词汇量可以吗?
【发布时间】:2019-07-02 01:27:13
【问题描述】:

我正在设计一个神经网络来尝试生成音乐。神经网络将是一个 2 层 LSTM(长短期记忆)。 我希望将音乐编码为许多热门格式以进行训练,即,如果该音符正在播放,则为 1,如果该音符未播放,则为 0。 以下是这些数据的摘录:

0000000000000000000000000000000000000000000000000001000100100001000000000000000000000000
0000000000000000000000000000000000000000000000000001000100100001000000000000000000000000
0000000000000000000000000000000000000000000000000001000100100001000000000000000000000000
0000000000000000000000000000000000000000000000000001000100100001000000000000000000000000
0000000000000000000000000000000000000000000000000001000100100001000000000000000000000000
0000000000000000000000000000000000000000000000000011010100100001010000000000000000000000

有 88 列代表 88 个音符,现在每个代表一个新节拍。输出将是字符级别的。

我只是想知道,既然词汇表中只有 2 个字符,那么下一个总是出现 0 的概率会高于下一个出现 1 的概率吗? 我知道词汇量很大,需要很大的训练集,但我只有很小的词汇量。我有 229 个文件,对应于大约 50,000 行文本。这足以防止输出全为 0 吗?

另外,最好有 88 个节点,每个音符 1 个节点,还是一个字符一次只有一个节点?

提前致谢

【问题讨论】:

    标签: machine-learning neural-network lstm recurrent-neural-network one-hot-encoding


    【解决方案1】:

    只要您的数据集不偏向于某个“单词”,少量词汇就可以了。

    对于“88个节点,每个音符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 个输出节点。

    【讨论】:

    • 我的只有 0 和 1,会不会很偏向 0?
    • 没有,只要您的数据包含大量的 1 和 0。
    猜你喜欢
    • 2023-02-25
    • 1970-01-01
    • 2020-11-01
    • 2013-08-03
    • 2021-08-24
    • 2017-06-14
    • 2017-02-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多