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
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
|
'''
Created on Mar 16, 2014
@author: joe
'''
import random
import mathobj
matRandFnc=lambda :3*random.gauss(0.0,1.0)
vecRandFnc=lambda :random.random()/5.0-4.1
class SharedLinearity:
def __init__(self,nIn=1,nOut=1,inS=True,
matRand=matRandFnc,vecRand=vecRandFnc):
self.nInputs=nIn
self.nOutputs=nOut
self.inScale=inS
self.matRand=matRand
self.vecRand=vecRand
def flush(self):
print "<biasedlinearity>", self.nOutputs, self.nInputs
mathobj.randomFnc=self.matRand
mathobj.inputScale=self.inScale
mathobj.PrintTransMatrix(self.nInputs, self.nOutputs)
mathobj.randomFnc=self.vecRand
mathobj.PrintVector(self.nOutputs)
class Linearity:
def __init__(self,nIn=1,nOut=1,inS=True,
matRand=matRandFnc):
self.nInputs=nIn
self.nOutputs=nOut
self.inScale=inS
self.matRand=matRand
def flush(self):
print "<linearity>", self.nOutputs, self.nInputs
mathobj.randomFnc=self.matRand
mathobj.inputScale=self.inScale
mathobj.PrintTransMatrix(self.nInputs, self.nOutputs)
class UpdatableBias:
def __init__(self,nIn=1,vecRand=vecRandFnc):
self.nInputs=nIn
self.nOutputs=nIn
self.vecRand=vecRand
def flush(self):
print "<updatablebias>", self.nOutputs, self.nInputs
mathobj.randomFnc=self.vecRand
mathobj.PrintVector(self.nInputs)
class MiscPipe:
def __init__(self,nIn=1,name="<pipe>"):
self.nInputs=nIn
self.nOutputs=nIn
self.name=name
def flush(self):
print self.name, self.nOutputs, self.nInputs
class Distrib:
def __init__(self,nIn=1,size=1):
self.nInputs=nIn
self.nOutputs=nIn
self.size=size
def flush(self):
print "<distrib>", self.nOutputs, self.nInputs
print self.size
class Combine:
def __init__(self,nIn=1,size=1):
self.nInputs=nIn
self.nOutputs=nIn
self.size=size
def flush(self):
print "<combine>", self.nOutputs, self.nInputs
print self.size
class Divide:
def __init__(self,nIn=1,divLen=[]):
self.nInputs=nIn
self.nOutputs=divLen[0]
self.divLen=divLen
def push(self,nxtLen):
self.divLen+=[nxtLen];
def flush(self):
print "<divide>", self.nOutputs, self.nInputs
print len(self.divLen),
for Len in self.divLen:
print Len,
print
class Merge:
def __init__(self,nOut=1,divLen=[]):
self.nOutputs=nOut
self.nInputs=divLen[0]
self.divLen=divLen
def push(self,nxtLen):
self.divLen+=[nxtLen];
def flush(self):
print "<merge>", self.nOutputs, self.nInputs
print len(self.divLen),
for Len in self.divLen:
print Len,
print
class Reorder:
def __init__(self,nIn=1,Order=[]):
self.nInputs=nIn
self.nOutputs=nIn
self.Order=Order
def push(self,nxtPos):
self.Order+=[nxtPos];
def flush(self):
print "<reorder>", self.nOutputs, self.nInputs
print len(self.Order),
for Len in self.Order:
print Len,
print
class Compound:
def __init__(self,nIn=1,nOut=1,Objs=[]):
self.nInputs=nIn
self.nOutputs=nOut
self.Objs=Objs
def push(self,nxtObj):
self.Objs+=[nxtObj];
def flush(self):
print "<compound>", self.nOutputs, self.nInputs
for Obj in self.Objs:
Obj.flush()
print "<endblock>"
class Discrete:
def __init__(self,nIn=1,nOut=1,Objs=[]):
self.nInputs=nIn
self.nOutputs=nOut
self.Objs=Objs
def push(self,nxtObj):
self.Objs+=[nxtObj];
def flush(self):
print "<discrete>", self.nOutputs, self.nInputs
for Obj in self.Objs:
Obj.flush()
print "<endblock>"
|