【发布时间】:2018-08-04 14:28:20
【问题描述】:
这里是神经网络新手。
我正在使用 PyBrain 尝试创建一个学习音乐的网络。
我的数据集包含大约一百首歌曲,其中网络的输入是两个音符,目标是接下来的两个音符。
每个音符由一个表示音符/和弦组合的 int 表示,一个表示音符八度音阶的 int 和一个表示音符持续时间的 float。
我的网络如下所示:
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)
我的问题是,当我训练网络时,我得到一个巨大的错误(例如 24569847209.8),它似乎永远不会下降,它随着每个时期的变化而变化,但它总是徘徊在相同的数字附近。
网络经过训练后,它通过将两个随机音符作为输入来创建一首歌曲,然后生成目标,然后将目标作为输入传回,并一遍又一遍地重复此过程,直到它拥有一首完整的歌曲。但我发现它所做的只是一遍又一遍地写入输出,就像它只学习一个固定目标一样。
我真的不确定是什么问题导致了这种情况。如果有一些我应该包含的信息,请告诉我。
【问题讨论】:
-
Stackoverflow 是为了解决编码问题,而不是教人们如何使用神经网络。初始化网络时,很多事情都可能出错。在你真的遇到编码问题之前,请询问 cs.stackexchange.com/questions/tagged/neural-networks 或 ai.stackexchange.com/questions/tagged/neural-networks 或 stats.stackexchange.com/questions/36247/…
-
我认为我不同意这种评价。我有代码;它有问题。我已经编辑了我的问题和标题以消除任何混淆。如果你觉得我遗漏了一些重要的东西,请告诉我。
-
可能是您的网络不知道该做什么,因为歌曲中隐藏了很多两个音符的组合。你可以尝试用几首非常相似的歌曲来“过度训练”你的网络。在这种情况下,网络不会猜测而是学习/记住序列,你应该看看你的方法是否普遍有效。
-
@Joe 仅在一首歌曲(大约 1,000 个左右的音符对样本)上运行了 1,000 个 epoch。总错误:5660650926.69 在开始和总错误:5563442152.03 在结束。结果是一样的——一遍又一遍地重复相同的两个音符。我会尝试更多的训练,但在我看来,错误一开始就不应该那么高,似乎是一个荒谬的数字?
-
在我看来,您的网络似乎并没有像您认为的那样做。也许从一个非常简单的例子开始,也许取一个由 50 个数字组成的数组,可能有 5 个左右的正弦或余弦,让你的网络猜测它们。
标签: python neural-network lstm recurrent-neural-network pybrain