Эхо-предсказание состояния лень
Я пытаюсь использовать PyBrain для прогнозирования временных рядов путем реализации этого решения. Другие производят большие смещения. Проблема в том, что, хотя я пытался изменить скорость обучения, импульс, максимальные периоды обучения, продолжающиеся периоды, количество нейронов (1-500) и функцию активации, результат всегда плоский. Каким может быть решение?
Синий: оригинал. Зеленый: прогноз сети.
INPUTS = 60
HIDDEN = 60
OUTPUTS = 1
def build_network():
net = buildNetwork(INPUTS, HIDDEN, OUTPUTS,
hiddenclass=LSTMLayer,
outclass=LinearLayer,
recurrent=True,
bias=True, outputbias=False)
net.sortModules()
return net
def prepare_datasets(data, training_data_ratio):
training_data, validation_data = split_list(data, training_data_ratio)
training_set = SequentialDataSet(INPUTS, OUTPUTS)
for i in range(len(training_data) - INPUTS - 1):
training_set.newSequence()
tr_inputs = training_data[i:i + INPUTS]
tr_output = training_data[i + INPUTS]
training_set.addSample(tr_inputs, tr_output)
validation_set = []
for i in range(len(validation_data) - INPUTS - 1):
validation_set.append(validation_data[i:i + INPUTS])
return training_set, validation_set
def train_network(net, data, max_iterations):
net.randomize()
learning_rate = 0.1
trainer = BackpropTrainer(net, data, verbose=True,
momentum=0.8,
learningrate=learning_rate)
errors = trainer.trainUntilConvergence(maxEpochs=max_iterations, continueEpochs=10)
return errors
def try_network(net, data):
outputs = []
for item in data:
output = net.activate(item)[0]
outputs.append(output)
return outputs