神经网络错误率不会进展

时间:2018-02-24 18:43:45

标签: python neural-network lstm recurrent-neural-network pybrain

神经网络菜鸟。
我正在使用PyBrain尝试创建一个学习音乐的网络 我的数据集由大约一百首歌曲组成,其中网络的输入是两个音符,目标是接下来的两个音符 每个音符由音符/和弦组合的int表示,音符的八度音程为int,音符持续时间为浮点数。
我的网络看起来像这样:

    net = RecurrentNetwork()
    net.addInputModule(LinearLayer(6, name='in'))
    net.addModule(LSTMLayer(50, name='hidden1'))
    net.addModule(LSTMLayer(50, name='hidden2'))
    net.addOutputModule(LinearLayer(6, name='out'))
    net.addConnection(FullConnection(net['in'], net['hidden1'], name='c1'))
    net.addConnection(FullConnection(net['hidden1'], net['hidden2'], name='c3'))
    net.addRecurrentConnection(FullConnection(net['hidden2'], net['hidden1'], name='c4'))
    net.addConnection(FullConnection(net['hidden2'], net['out'], name='c5'))
    net.sortModules()

使用像这样的数据集和培训师:

ds = SupervisedDataSet(6, 6)
trainer = BackpropTrainer(net, ds, verbose = True, momentum = 0.01)

我的问题是,当我训练网络时,我收到一个巨大的错误(E.G。24569847209.8),它似乎永远不会下降,它随着每个时代而变化,但它总是在相同的数字上徘徊。

在网络训练之后,它通过将两个随机音符作为输入创建一首歌曲,然后生成目标,然后将目标作为输入传回,并反复重复直到它有一首完整的歌曲。但我发现它所做的一切只是一遍又一遍地写输出,就像只学习一个固定目标一样。

我真的不确定我所拥有的是什么导致了这个问题。如果有一些信息我应该包括在内,请告诉我。

1 个答案:

答案 0 :(得分:1)

我似乎已经修复了学习问题! 我培训时,我的网络错误正在逐渐减少! 我使用的是错误的训练师。由于我使用的是递归神经网络,我不应该使用反向传播训练器。我现在正在使用RPropMinusTrainer。 要修复,请执行以下操作:

trainer = BackpropTrainer(net, ds, verbose = True, momentum = 0.01)

更改为

trainer = RPropMinusTrainer(net, dataset=ds, verbose = True)