| 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
|
from pyrobot.brain.VisConx.VisRobotConx import *
from pyrobot.brain.ravq import *
import math
def saveListToFile(ls, file):
for val in ls:
file.write(str(val) + " ")
file.write("\n")
# log file directories
rootDirectory = "/local/"
currentExperiment = "Data_Wander/"
dataOutput = "SRNBuffer/"
currentBrain = "/home/GovWander.py"
n = VisRobotSRN()
n.setSequenceType("ordered-continuous")
n.addLayers(16,5,2)
n.loadDataFromFile(rootDirectory+currentExperiment+'input_target.dat')
n.setEpsilon(0.3)
n.setMomentum(0.0)
n.setTolerance(0.05)
n.setLearning(1)
ravq = RAVQ(1, .2, 1.6)
ravq.setAddModels(1)
ravq.setMask([1,]*len(n.inputs[0]) + [8,]*len(n.targets[0]))
ravq.setHistory(0)
bufferLength = 10
historyLength = 9
historyBuffer = []
contextBuffer = []
trainingBuffer = []
trainingSeq = 0
seqLoc = 0 #location within current training pattern
for x in n.loadOrder:
inputs = n.inputs[x]
targets = n.targets[x]
ravq.input(inputs+targets)
#maintain input/target sequences and context layer
if len(historyBuffer) < historyLength:
historyBuffer = [inputs+targets] + historyBuffer
contextBuffer = [n.getLayer('context').getActivationsList()] + contextBuffer
else:
historyBuffer = [inputs+targets] + historyBuffer[0:-1]
contextBuffer = [n.getLayer('context').getActivationsList()] + contextBuffer[0:-1]
if trainingSeq >= len(trainingBuffer)-1:
trainingSeq = 0
else:
trainingSeq += 1
seqLoc = 0
#if model vector changes, put tuple of history and starting context into training buffer
if ravq.newWinnerIndex != ravq.previousWinnerIndex:
if len(trainingBuffer) < bufferLength:
trainingBuffer = [(historyBuffer, contextBuffer[-1])] + trainingBuffer
else:
trainingBuffer = [(historyBuffer, contextBuffer[-1])] + trainingBuffer[0:-1]
print " Winner #: ", ravq.newWinnerIndex
print " Current step: ", x
if len(trainingBuffer) > 0:
if seqLoc >= len(trainingBuffer[trainingSeq]):
if trainingSeq >= len(trainingBuffer)-1:
trainingSeq = 0
else:
trainingSeq += 1
seqLoc = 0
n.getLayer('context').resetFlags()
n.getLayer('context').copyActivations(trainingBuffer[trainingSeq][1])
n.step(input = trainingBuffer[trainingSeq][0][-1 - seqLoc][0:len(inputs)],
output = trainingBuffer[trainingSeq][0][-1 - seqLoc][len(inputs):len(inputs)+2])
seqLoc += 1
if x % 10000 == 0:
print " Count: ", x
print " Num Models: ", len(ravq.models)
print "Training Buffer Length: ", len(trainingBuffer)
for i in xrange(len(trainingBuffer)):
print "Entry 3%d: %d" % (i, len(trainingBuffer[i][0]))
n.saveWeightsToFile(rootDirectory+currentExperiment+dataOutput+'offline.hidden5_10_9_.3.wts')
print " Num Models: ", len(ravq.models)
for i in xrange(len(ravq.counters)):
print "Total Count for model %u : " % (i,), ravq.counters[i] |