def __init__( self, n_neurons, dimensions, radius=1.0, encoders=nengo.Default, **ens_kwargs): super(Product, self).__init__(self) with self: self.config[nengo.Ensemble].update(ens_kwargs) self.A = nengo.Node(size_in=dimensions, label="A") self.B = nengo.Node(size_in=dimensions, label="B") self.dimensions = dimensions if encoders is nengo.Default: encoders = Choice([[1, 1], [1, -1], [-1, 1], [-1, -1]]) optimizer = SubvectorRadiusOptimizer( n_neurons, 2, ens_kwargs=ens_kwargs) scaled_r = radius * optimizer.find_optimal_radius(dimensions, 1) self.product = EnsembleArray( n_neurons, n_ensembles=dimensions, ens_dimensions=2, radius=scaled_r, encoders=encoders, **ens_kwargs) nengo.Connection( self.A, self.product.input[::2], synapse=None) nengo.Connection( self.B, self.product.input[1::2], synapse=None) self.output = self.product.add_output( 'product', lambda x: x[0] * x[1])
def __init__(self, n_neurons, dimensions, n_ensembles, ens_dimensions=1, label=None, radius=1.0, **ens_kwargs): if dimensions % n_ensembles != 0: raise ValueError( "'dimensions' has to be divisible by 'n_ensembles'.") if n_ensembles > 1: optimizer = SubvectorRadiusOptimizer( n_neurons, ens_dimensions, ens_kwargs=ens_kwargs) scaled_r = radius * optimizer.find_optimal_radius( dimensions, dimensions // n_ensembles) else: scaled_r = 1. super(UnitEA, self).__init__( n_neurons, n_ensembles, ens_dimensions, label=label, radius=scaled_r, **ens_kwargs)