summaryrefslogtreecommitdiff
path: root/NetGen/layerobj.py
diff options
context:
space:
mode:
authorJoe Zhao <ztuowen@gmail.com>2014-04-14 08:14:45 +0800
committerJoe Zhao <ztuowen@gmail.com>2014-04-14 08:14:45 +0800
commitcccccbf6cca94a3eaf813b4468453160e91c332b (patch)
tree23418cb73a10ae3b0688681a7f0ba9b06424583e /NetGen/layerobj.py
downloadtnet-cccccbf6cca94a3eaf813b4468453160e91c332b.tar.gz
tnet-cccccbf6cca94a3eaf813b4468453160e91c332b.tar.bz2
tnet-cccccbf6cca94a3eaf813b4468453160e91c332b.zip
First commit
Diffstat (limited to 'NetGen/layerobj.py')
-rw-r--r--NetGen/layerobj.py160
1 files changed, 160 insertions, 0 deletions
diff --git a/NetGen/layerobj.py b/NetGen/layerobj.py
new file mode 100644
index 0000000..3cfadf0
--- /dev/null
+++ b/NetGen/layerobj.py
@@ -0,0 +1,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>" \ No newline at end of file