/
networktrainer.py
97 lines (72 loc) · 2.89 KB
/
networktrainer.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
from financialdata import StockData
from financialmodel import FinancialNetwork
from evolinotrainer import EvolinoTrainer, EvolinoEvaluation
from pylab import plot, show, ion, cla, subplot, title, figlegend, draw
from pybrain.tools.customxml.networkwriter import NetworkWriter
import numpy as np
import matplotlib.pyplot as plt
import pylab
name='acs'
data=StockData()
data.readData('stockprices/'+name+'.txt')
data.normalizeData()
data.delayInputs()
data.createSequentialDataSets()
model = FinancialNetwork(data.trainData.indim,data.trainData.outdim,hiddim=10)
trainer=EvolinoTrainer(model,data.trainData,
subPopulationSize = 20,
nParents = 8,
nCombinations = 2,
initialWeightRange = ( -0.1 , 0.1 ),
mutationAlpha = 0.001,
nBurstMutationEpochs = np.Infinity,
verbosity = 2)
trainInput = data.trainData.getField('input')
testInput = data.testData.getField('input')
trainTarget = data.trainData.getField('target')
testTarget = data.testData.getField('target')
wtRatio=1./3.
training_washout_separator=int(wtRatio*len(trainInput))
test_washout_separator=int(wtRatio*len(testInput))
washout_trainInput=trainInput[:training_washout_separator]
washout_testInput=testInput[:test_washout_separator]
forecast_trainInput=trainInput[training_washout_separator:]
forecast_testInput=testInput[test_washout_separator:]
target_trainInput=trainTarget[training_washout_separator:]
target_testInput=testTarget[test_washout_separator:]
ion() # switch matplotlib to interactive mode
for i in range(100):
print("======================")
print("====== NEXT RUN ======")
print("======================")
print("=== TRAINING")
# train the network for 1 epoch
trainer.trainEpochs( 1 )
print("=== PLOTTING\n")
# calculate the nets output for train and the test data
model.activate(washout_trainInput)
trnSequenceOutput = model.activate(forecast_trainInput)
model.activate(washout_testInput)
tstSequenceOutput = model.activate(forecast_testInput)
NetworkWriter.writeToFile(model.network,'trainednetworks/'+name+'.xml')
with open ('trainednetworks/trainresults/%s_train_results.txt'% (name),'w') as f:
for i in range(len(trnSequenceOutput)):
f.write('%.7f\t%.7f\n' % (target_trainInput[i],trnSequenceOutput[i]))
f.close()
with open ('trainednetworks/trainresults/%s_test_results.txt'% (name),'w') as f:
for i in range(len(tstSequenceOutput)):
f.write('%.7f\t%.7f\n' % (target_testInput[i],tstSequenceOutput[i]))
f.close()
# plot training data
sp = subplot(211) # switch to the first subplot
cla() # clear the subplot
targetline = plot(target_trainInput,"r-") # plot the targets
outputline = plot(trnSequenceOutput,"b-") # plot the actual output
# plot test data
sp = subplot(212)
cla()
plot(target_testInput,"r-")
plot(tstSequenceOutput,"b-")
# draw everything
draw()
show()