Здесь новичок в нейронных сетях.
Я использую PyBrain, чтобы попытаться создать сеть, которая обучается музыке.
Мой набор данных состоит из примерно сотни песен, где вход для сети — две ноты, а цель — следующие две ноты. .
Каждая нота представлена целым числом для комбинации нота/аккорд, целым числом для октавы ноты и плавающим числом для длительности ноты.
Моя сеть выглядит следующим образом:
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), которая никогда не уменьшается, она меняется с каждой эпохой, но всегда колеблется вокруг одного и того же числа.
После того, как сеть обучена, она создает песню, беря две случайные ноты в качестве входных данных, затем генерируя цель, затем передавая цель обратно в качестве входных данных и повторяя это снова и снова, пока не будет получена полная песня. Но я обнаружил, что все, что он когда-либо делает, это просто записывает вывод снова и снова, как будто он просто изучает одну фиксированную цель.
Я действительно не уверен, что не так с тем, что у меня есть, что вызывает это. Если есть какая-то информация, которую я должен включить, пожалуйста, дайте мне знать.