Как вы делаете прогноз (Прогноз) из обученной сети для данного входного сигнала?


Ниже приведен мой код для нейронной сети с 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 2

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

. . .