神经网络数据稀疏性

时间:2018-02-11 14:46:03

标签: python neural-network pybrain

我正在使用PyBrain来训练音乐网络。输入是两个音符,输出是接下来的两个音符。 每个音符由映射到音符的整数(E.G C#= 11,F = 7),八度音程和持续时间表示。所以我正在使用数据集:

ds = SupervisedDataSet(6, 6)

看起来像([note1, octave1, duration1, note2, octave2, duration2], [note1, octave1, duration1, note2, octave2, duration2])

然而,我遇到了和弦问题(I.E一次播放多个音符)。为了解决这个问题,我摆脱了表示音符的第一个整数,并用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)

当我训练时,我遇到了一个巨大的错误,比如十或十万。

1 个答案:

答案 0 :(得分:0)

你的问题对我来说不是那么清楚,我认为它需要更详细的解释,但依赖于我的理解我认为你不需要在你的网络中重新学习,也试图在隐藏层中使用另一个激活功能,例如Softmax。我在一些带有6个节点输入和6个输出的样本数据集上进行了测试,并且它正在被正确训练,所以我在那里建议你使用我的版本:

from pybrain.tools.shortcuts import buildNetwork
from pybrain.datasets import SupervisedDataSet
from pybrain.supervised.trainers import BackpropTrainer
from pybrain.structure.modules import SoftmaxLayer

ds = SupervisedDataSet(6, 6)

#
# fill dataset
#
net = buildNetwork(6, 24, 6, bias=True, hiddenclass=SoftmaxLayer)
trainer = BackpropTrainer(net, ds)

<强>列车:

error = 10
while error > 0.00001:  #choose error like you want
    error = trainer.train()
    print error #just for logging

#and activate
print net.activate([*,*,*,*,*,*])