Exemplo n.º 1
0
    def _buildBorderStructure(self, inmesh, hiddenmesh, outmesh):
        self._buildSwipingStructure(inmesh, hiddenmesh, outmesh)
        self.addModule(BiasUnit(name='bias'))

        # build the motherconnections for the borders
        if self.simpleborders:
            if not 'borderconn' in self.predefined:
                self.predefined['borderconn'] = MotherConnection(
                    hiddenmesh.componentIndim, name='bconn')
        else:
            if not 'bordconns' in self.predefined:
                self.predefined['bordconns'] = {}
            for dim, maxval in enumerate(self.dims):
                if dim > 0 and self.symmetricdimensions:
                    self.predefined['bordconns'][dim] = self.predefined[
                        'bordconns'][0]
                elif dim not in self.predefined['bordconns']:
                    self.predefined['bordconns'][dim] = {}
                tmp = self.predefined['bordconns'][dim].copy()
                if len(self.dims) == 1 and () not in tmp:
                    tmp[()] = MotherConnection(hiddenmesh.componentIndim,
                                               name='bconn')
                for t in iterCombinations(tupleRemoveItem(self.dims, dim)):
                    tc = self._canonicForm(t, dim)
                    if t == tc and t not in tmp:
                        # the connections from the borders are symetrical,
                        # so we need seperate ones only up to the middle
                        tmp[t] = MotherConnection(hiddenmesh.componentIndim,
                                                  name='bconn' + str(dim) +
                                                  str(t))
                        if self.extrapolateBorderValues:
                            p = self._extrapolateBorderAt(
                                t, self.predefined['bordconns'][dim])
                            if p != None:
                                tmp[t].params[:] = p
                self.predefined['bordconns'][dim] = tmp

        # link the bordering units to the bias, using the correct connection
        for dim, maxval in enumerate(self.dims):
            for unit in self._iterateOverUnits():
                if self.simpleborders:
                    bconn = self.predefined['borderconn']
                else:
                    tc = self._canonicForm(tupleRemoveItem(unit, dim), dim)
                    bconn = self.predefined['bordconns'][dim][tc]
                hunits = []
                if unit[dim] == 0:
                    for swipe in range(self.swipes):
                        if (swipe / 2**dim) % 2 == 0:
                            hunits.append(tuple(list(unit) + [swipe]))
                if unit[dim] == maxval - 1:
                    for swipe in range(self.swipes):
                        if (swipe / 2**dim) % 2 == 1:
                            hunits.append(tuple(list(unit) + [swipe]))
                for hunit in hunits:
                    self.addConnection(
                        SharedFullConnection(bconn, self['bias'],
                                             hiddenmesh[hunit]))
Exemplo n.º 2
0
    def _buildBorderStructure(self, inmesh, hiddenmesh, outmesh):
        self._buildSwipingStructure(inmesh, hiddenmesh, outmesh)
        self.addModule(BiasUnit(name = 'bias'))

        # build the motherconnections for the borders
        if self.simpleborders:
            if not 'borderconn' in self.predefined:
                self.predefined['borderconn'] = MotherConnection(hiddenmesh.componentIndim, name = 'bconn')
        else:
            if not 'bordconns' in self.predefined:
                self.predefined['bordconns'] = {}
            for dim, maxval in enumerate(self.dims):
                if dim > 0 and self.symmetricdimensions:
                    self.predefined['bordconns'][dim] = self.predefined['bordconns'][0]
                elif dim not in self.predefined['bordconns']:
                    self.predefined['bordconns'][dim] = {}
                tmp = self.predefined['bordconns'][dim].copy()
                if len(self.dims) == 1 and () not in tmp:
                    tmp[()] = MotherConnection(hiddenmesh.componentIndim, name = 'bconn')
                for t in iterCombinations(tupleRemoveItem(self.dims, dim)):
                    tc = self._canonicForm(t, dim)
                    if t == tc and t not in tmp:
                        # the connections from the borders are symmetrical,
                        # so we need separate ones only up to the middle
                        tmp[t] = MotherConnection(hiddenmesh.componentIndim, name = 'bconn'+str(dim)+str(t))
                        if self.extrapolateBorderValues:
                            p = self._extrapolateBorderAt(t, self.predefined['bordconns'][dim])
                            if p != None:
                                tmp[t].params[:] = p
                self.predefined['bordconns'][dim] = tmp

        # link the bordering units to the bias, using the correct connection
        for dim, maxval in enumerate(self.dims):
            for unit in self._iterateOverUnits():
                if self.simpleborders:
                    bconn = self.predefined['borderconn']
                else:
                    tc = self._canonicForm(tupleRemoveItem(unit, dim), dim)
                    bconn = self.predefined['bordconns'][dim][tc]
                hunits = []
                if unit[dim] == 0:
                    for swipe in range(self.swipes):
                        if (swipe/2**dim) % 2 == 0:
                            hunits.append(tuple(list(unit)+[swipe]))
                if unit[dim] == maxval-1:
                    for swipe in range(self.swipes):
                        if (swipe/2**dim) % 2 == 1:
                            hunits.append(tuple(list(unit)+[swipe]))
                for hunit in hunits:
                    self.addConnection(SharedFullConnection(bconn, self['bias'], hiddenmesh[hunit]))
Exemplo n.º 3
0
 def __init__(self, constructor, dimensions, name=None, baserename=False):
     """:arg constructor: a constructor method that returns a module
     :arg dimensions: tuple of dimensions. """
     self.dims = dimensions
     if name != None:
         self.name = name
     # a dict where the tuple of coordinates is the key
     self.components = {}
     for coord in iterCombinations(self.dims):
         tmp = constructor()
         self.components[coord] = tmp
         tmp.name = self.name + str(coord)
         if baserename and isinstance(tmp, ModuleSlice):
             tmp.base.name = tmp.name
     self.componentIndim = tmp.indim
     self.componentOutdim = tmp.outdim
Exemplo n.º 4
0
 def __init__(self, constructor, dimensions, name = None, baserename = False):
     """ @param constructor: a constructor method that returns a module
     @param dimensions: tuple of dimensions. """
     self.dims = dimensions
     if name != None:
         self.name = name
     # a dict where the tuple of coordinates is the key
     self.components = {}
     for coord in iterCombinations(self.dims):
         tmp = constructor()
         self.components[coord] = tmp
         tmp.name = self.name + str(coord)
         if baserename and isinstance(tmp, ModuleSlice):
             tmp.base.name = tmp.name
     self.componentIndim = tmp.indim
     self.componentOutdim = tmp.outdim
Exemplo n.º 5
0
 def __iter__(self):
     for coord in iterCombinations(self.dims):
         yield self.components[coord]
Exemplo n.º 6
0
 def __iter__(self):
     for coord in iterCombinations(self.dims):
         yield self.components[coord]
Exemplo n.º 7
0
 def _iterateOverUnits(self):
     """ iterate over the coordinates defines by the ranges of self.dims. """
     return iterCombinations(self.dims)
Exemplo n.º 8
0
 def _iterateOverUnits(self):
     """ iterate over the coordinates defines by the ranges of self.dims. """
     return iterCombinations(self.dims)