神经网络菜鸟。
我正在使用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),它似乎永远不会下降,它随着每个时代而变化,但它总是在相同的数字上徘徊。
在网络训练之后,它通过将两个随机音符作为输入创建一首歌曲,然后生成目标,然后将目标作为输入传回,并反复重复直到它有一首完整的歌曲。但我发现它所做的一切只是一遍又一遍地写输出,就像只学习一个固定目标一样。
我真的不确定我所拥有的是什么导致了这个问题。如果有一些信息我应该包括在内,请告诉我。
答案 0 :(得分:1)
我似乎已经修复了学习问题! 我培训时,我的网络错误正在逐渐减少! 我使用的是错误的训练师。由于我使用的是递归神经网络,我不应该使用反向传播训练器。我现在正在使用RPropMinusTrainer。 要修复,请执行以下操作:
trainer = BackpropTrainer(net, ds, verbose = True, momentum = 0.01)
更改为
trainer = RPropMinusTrainer(net, dataset=ds, verbose = True)