def buildSwipingNetwork(dimensions=3): d = tuple([2] * dimensions) inmesh = ModuleMesh.constructWithLayers(LinearLayer, 1, d, 'in') hmesh = ModuleMesh.constructWithLayers(LinearLayer, 1, tuple(list(d) + [2**len(d)]), 'h') outmesh = ModuleMesh.constructWithLayers(LinearLayer, 1, d, 'out') return BorderSwipingNetwork(inmesh, hmesh, outmesh)
def buildSimpleBorderSwipingNet(size = 3, dim = 3, hsize = 1, predefined = {}): """ build a simple swiping network,of given size and dimension, using linear inputs and output""" # assuming identical size in all dimensions dims = tuple([size]*dim) # also includes one dimension for the swipes hdims = tuple(list(dims)+[2**dim]) inmod = LinearLayer(size**dim, name = 'input') inmesh = ModuleMesh.viewOnFlatLayer(inmod, dims, 'inmesh') outmod = LinearLayer(size**dim, name = 'output') outmesh = ModuleMesh.viewOnFlatLayer(outmod, dims, 'outmesh') hiddenmesh = ModuleMesh.constructWithLayers(TanhLayer, hsize, hdims, 'hidden') return BorderSwipingNetwork(inmesh, hiddenmesh, outmesh, predefined = predefined)
def __init__(self, dims, **args): """ The one required argument specifies the sizes of each dimension (minimum 2) """ assert len(dims) == 2 SwipingNetwork.__init__(self, dims=dims, **args) if self.mariopos == None: self.mariopos = (dims[0] / 2, dims[1] / 2) pdims = product(dims) # the input is a 2D-mesh (as a view on a flat input layer) inmod = LinearLayer(self.insize * pdims, name='input') inmesh = ModuleMesh.viewOnFlatLayer(inmod, dims, 'inmesh') # the output is a 2D-mesh (as a view on a flat sigmoid output layer) outmod = self.outcomponentclass(self.outputs * pdims, name='output') outmesh = ModuleMesh.viewOnFlatLayer(outmod, dims, 'outmesh') if self.componentclass is MDLSTMLayer: c = lambda: MDLSTMLayer(self.hsize, 2, self.peepholes).meatSlice() hiddenmesh = ModuleMesh(c, (self.size, self.size, 4), 'hidden', baserename=True) else: hiddenmesh = ModuleMesh.constructWithLayers( self.componentclass, self.hsize, tuple(list(dims) + [self.swipes]), 'hidden') self._buildSwipingStructure(inmesh, hiddenmesh, outmesh) o = LinearLayer(self.outputs) self.addConnection(IdentityConnection(outmesh[self.mariopos], o)) self.outmodules = [] self.addOutputModule(o) # add the identity connections for the states for m in self.modules: if isinstance(m, MDLSTMLayer): tmp = m.stateSlice() index = 0 for c in list(self.connections[m]): if isinstance(c.outmod, MDLSTMLayer): self.addConnection( IdentityConnection( tmp, c.outmod.stateSlice(), outSliceFrom=self.hsize * (index), outSliceTo=self.hsize * (index + 1))) index += 1 # special inputs self.addInputModule(LinearLayer(2, name='specialin')) self.addConnection(FullConnection(self['specialin'], o)) self.sortModules()
def _buildCaptureNetwork(self): # the input is a 2D-mesh (as a view on a flat input layer) inmod = LinearLayer(self.insize * self.size * self.size, name='input') inmesh = ModuleMesh.viewOnFlatLayer(inmod, (self.size, self.size), 'inmesh') # the output is a 2D-mesh (as a view on a flat sigmoid output layer) outmod = self.outcomponentclass(self.outputs * self.size * self.size, name='output') outmesh = ModuleMesh.viewOnFlatLayer(outmod, (self.size, self.size), 'outmesh') if self.componentclass is MDLSTMLayer: c = lambda: MDLSTMLayer(self.hsize, 2, self.peepholes).meatSlice() hiddenmesh = ModuleMesh(c, (self.size, self.size, 4), 'hidden', baserename=True) else: hiddenmesh = ModuleMesh.constructWithLayers( self.componentclass, self.hsize, (self.size, self.size, 4), 'hidden') self._buildBorderStructure(inmesh, hiddenmesh, outmesh) # add the identity connections for the states for m in self.modules: if isinstance(m, MDLSTMLayer): tmp = m.stateSlice() index = 0 for c in list(self.connections[m]): if isinstance(c.outmod, MDLSTMLayer): self.addConnection( IdentityConnection( tmp, c.outmod.stateSlice(), outSliceFrom=self.hsize * (index), outSliceTo=self.hsize * (index + 1))) index += 1 # direct connections between input and output if self.directlink: self._buildDirectLink(inmesh, outmesh) # combined inputs if self.combinputs > 0: cin = LinearLayer(self.combinputs, name='globalin') self.addInputModule(cin) if 'globalinconn' not in self.predefined: self.predefined['globalinconn'] = MotherConnection( cin.componentOutdim * hiddenmesh.componentIndim, 'globalinconn') self._linkToAll(cin, hiddenmesh, self.predefined['globalinconn'])
def __init__(self, dims, **args): """ The one required argument specifies the sizes of each dimension (minimum 2) """ assert len(dims) == 2 SwipingNetwork.__init__(self, dims = dims, **args) if self.mariopos == None: self.mariopos = (dims[0]/2, dims[1]/2) pdims = product(dims) # the input is a 2D-mesh (as a view on a flat input layer) inmod = LinearLayer(self.insize*pdims, name = 'input') inmesh = ModuleMesh.viewOnFlatLayer(inmod, dims, 'inmesh') # the output is a 2D-mesh (as a view on a flat sigmoid output layer) outmod = self.outcomponentclass(self.outputs*pdims, name = 'output') outmesh = ModuleMesh.viewOnFlatLayer(outmod, dims, 'outmesh') if self.componentclass is MDLSTMLayer: c = lambda: MDLSTMLayer(self.hsize, 2, self.peepholes).meatSlice() hiddenmesh = ModuleMesh(c, (self.size, self.size, 4), 'hidden', baserename = True) else: hiddenmesh = ModuleMesh.constructWithLayers(self.componentclass, self.hsize, tuple(list(dims)+[self.swipes]), 'hidden') self._buildSwipingStructure(inmesh, hiddenmesh, outmesh) o = LinearLayer(self.outputs) self.addConnection(IdentityConnection(outmesh[self.mariopos], o)) self.outmodules = [] self.addOutputModule(o) # add the identity connections for the states for m in self.modules: if isinstance(m, MDLSTMLayer): tmp = m.stateSlice() index = 0 for c in list(self.connections[m]): if isinstance(c.outmod, MDLSTMLayer): self.addConnection(IdentityConnection(tmp, c.outmod.stateSlice(), outSliceFrom = self.hsize*(index), outSliceTo = self.hsize*(index+1))) index += 1 # special inputs self.addInputModule(LinearLayer(2, name = 'specialin')) self.addConnection(FullConnection(self['specialin'], o)) self.sortModules()
def _buildCaptureNetwork(self): # the input is a 2D-mesh (as a view on a flat input layer) inmod = LinearLayer(self.insize*self.size*self.size, name = 'input') inmesh = ModuleMesh.viewOnFlatLayer(inmod, (self.size, self.size), 'inmesh') # the output is a 2D-mesh (as a view on a flat sigmoid output layer) outmod = self.outcomponentclass(self.outputs*self.size*self.size, name = 'output') outmesh = ModuleMesh.viewOnFlatLayer(outmod, (self.size, self.size), 'outmesh') if self.componentclass is MDLSTMLayer: c = lambda: MDLSTMLayer(self.hsize, 2, self.peepholes).meatSlice() hiddenmesh = ModuleMesh(c, (self.size, self.size, 4), 'hidden', baserename = True) else: hiddenmesh = ModuleMesh.constructWithLayers(self.componentclass, self.hsize, (self.size, self.size, 4), 'hidden') self._buildBorderStructure(inmesh, hiddenmesh, outmesh) # add the identity connections for the states for m in self.modules: if isinstance(m, MDLSTMLayer): tmp = m.stateSlice() index = 0 for c in list(self.connections[m]): if isinstance(c.outmod, MDLSTMLayer): self.addConnection(IdentityConnection(tmp, c.outmod.stateSlice(), outSliceFrom = self.hsize*(index), outSliceTo = self.hsize*(index+1))) index += 1 # direct connections between input and output if self.directlink: self._buildDirectLink(inmesh, outmesh) # combined inputs if self.combinputs > 0: cin = LinearLayer(self.combinputs, name = 'globalin') self.addInputModule(cin) if 'globalinconn' not in self.predefined: self.predefined['globalinconn'] = MotherConnection(cin.componentOutdim*hiddenmesh.componentIndim, 'globalinconn') self._linkToAll(cin, hiddenmesh, self.predefined['globalinconn'])
def buildSwipingNetwork(dimensions = 3): d = tuple([2] * dimensions) inmesh = ModuleMesh.constructWithLayers(LinearLayer, 1, d, 'in') hmesh = ModuleMesh.constructWithLayers(LinearLayer, 1, tuple(list(d)+[2**len(d)]), 'h') outmesh = ModuleMesh.constructWithLayers(LinearLayer, 1, d, 'out') return BorderSwipingNetwork(inmesh, hmesh, outmesh)