Как вы делаете прогноз (Прогноз) из обученной сети для данного входного сигнала?
Ниже приведен мой код для нейронной сети с 3 входами и 1 скрытым слоем и 1 выходом:
#Data
ds = SupervisedDataSet(3,1)
myfile = open('my_file.csv','r')
for data in tf.myfile ():
indata = tuple(data[:3])
outdata = tuple(data[3])
ds.addSample(indata,outdata)
net = FeedForwardNetwork()
inp = LinearLayer(3)
h1 = SigmoidLayer(1)
outp = LinearLayer(1)
# add modules
net.addOutputModule(outp)
net.addInputModule(inp)
net.addModule(h1)
# create connections
net.addConnection(FullConnection(inp, h1))
net.addConnection(FullConnection(h1, outp))
# finish up
net.sortModules()
# initialize the backprop trainer and train
trainer = BackpropTrainer(net, ds)
trainer.trainOnDataset(ds,1000) trainer.testOnData(verbose=True)
print 'Final weights:',net.params
Мой вопрос в том,если вы хотите использовать эту обученную нейронную сеть для составления прогноза на основе конкретных входных данных,как вы это делаете?2 ответа:
Согласно документации, Вы можете проверить определенные входные данные с помощью метода
activate
в вашей сети. Предполагая, что ваш ввод выглядит примерно так (1 2 3), ваш код будет выглядеть какnet.activate((1,2,3))
Если я правильно вас понял, ваши данные имеют временной порядок. То, что я делаю для составления прогноза, - это сдвигаю таблицу данных, чтобы представить следующий результат в качестве цели для обучения. Например, если у вас есть такие данные:
W1 x1 y1 z1
W2 x2 y2 z2
W3 x3 y3 z3
W4 x4 y4 z4
. . .
И вы хотите предсказать z2, вы строите таблицу, такую как:
W1 x1 y1 z1 | z2
W2 x2 y2 z2 / z3
W3 x3 y3 z3 | z4
. . .
Затем вы представляете последний столбец в качестве цели для обучения. Конечно, вы теряете одну строку в конце таблицы.
Вы также можете улучшить результат, предоставив разницу между шагами в качестве дополнительного входа (дает вам динамический эффект:
W2 x2 y2 z2 (w2-w1) (z2-z1) | z3
В3 Х3 У3 Z3 и (В3-В2) (и Z3-Z2) и | или Z4
. . .