【发布时间】:2018-07-21 19:26:38
【问题描述】:
我正在使用 PyBrain 训练音乐网络。输入是两个音符,输出是接下来的两个音符。 每个音符由映射到音符的整数表示(例如,C# = 11,F = 7)、八度音阶和持续时间。所以我使用的是这样的数据集:
ds = SupervisedDataSet(6, 6)
看起来像([note1, octave1, duration1, note2, octave2, duration2], [note1, octave1, duration1, note2, octave2, duration2])
但是,我遇到了和弦问题(即一次演奏多个音符)。为了解决这个问题,我去掉了代表音符的第一个整数,并将其替换为 22 个整数,设置为 1 或 0,以指示正在播放的音符。我仍然有这个,然后是八度音阶和持续时间。 比如下面的
[0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 4, 0.5]
表示 C#、E 和 A 的和弦,八度为 4,持续时间为 0.5。
PyBrain 在训练和测试后总是给我一个全零的输出。我明白它为什么会这样,但我不知道如何解决它。
有没有更好的方法来表示音符/和弦,这样 PyBrain 就不会出现这个问题?
编辑:我已经将位向量转换为十进制数,虽然网络不再只是给出零,但它仍然很清楚它没有正确学习模式。
我正在使用这样的网络:
net = buildNetwork(6, 24, 6, bias=True, hiddenclass=LSTMLayer, recurrent=True)
还有这样的教练:
trainer = BackpropTrainer(net, ds, verbose = True)
当我训练时,我遇到了一个巨大的错误,大概是十万或十万。
【问题讨论】:
-
请给我一个更详细的解释,我离音乐和这个八度音阶和 C#s 太远了,所以请编辑你的问题,并写下你如何训练你的网络,你使用哪个网络等
-
@Godot 我在原始帖子中添加了更多信息。就音乐术语而言,我会说这并不重要。基本上你可以想象我有 22 个灯——我用 22 个二进制值表示开/关,一个 int 表示亮度,一个 float 表示持续时间。我遇到的问题是,因为每个样本中 22 个灯中的大多数都将关闭,所以我的网络认为永远不应该有任何灯亮着。我希望这可以澄清!
标签: python neural-network pybrain