Skip to content

Sparse transforms throw ValueError zero-size array to reduction  #245

@arvoelke

Description

@arvoelke
import nengo
import nengo_loihi
from nengo.transforms import Sparse

n_neurons = 2
transform = Sparse((n_neurons, n_neurons), [(0, 0)], [1])

with nengo.Network() as model:
    x = nengo.Ensemble(n_neurons, 1)
    y = nengo.Ensemble(n_neurons, 1)
    nengo.Connection(x.neurons, y.neurons, transform=transform)
    
with nengo_loihi.Simulator(model) as sim:
    pass
---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-29-d937869d3cbc> in <module>()
     11     nengo.Connection(x.neurons, y.neurons, transform=transform)
     12 
---> 13 with nengo_loihi.Simulator(model) as sim:
     14     pass

~/git/nengo-loihi/nengo_loihi/simulator.py in __init__(self, network, dt, seed, model, precompute, target, progress_bar, remove_passthrough, hardware_options)
    144 
    145         # Build the network into the model
--> 146         self.model.build(network)
    147 
    148         # Build the extra passthrough connections into the model

~/git/nengo-loihi/nengo_loihi/builder/builder.py in build(self, obj, *args, **kwargs)
    206             model.seeded[obj] = self.seeded[obj]
    207 
--> 208         built = model.builder.build(model, obj, *args, **kwargs)
    209         if self.build_callback is not None:
    210             self.build_callback(obj)

~/git/nengo/nengo/builder/builder.py in build(cls, model, obj, *args, **kwargs)
    225             raise BuildError("Cannot build object of type %r" % type(obj).__name__)
    226 
--> 227         return cls.builders[obj_cls](model, obj, *args, **kwargs)
    228 
    229     @classmethod

~/git/nengo/nengo/builder/network.py in build_network(model, network, progress)
     92             # TODO: Except perhaps if the connection being learned
     93             # is in a subnetwork?
---> 94             model.build(conn)
     95 
     96         logger.debug("Network step 4: Building probes")

~/git/nengo-loihi/nengo_loihi/builder/builder.py in build(self, obj, *args, **kwargs)
    206             model.seeded[obj] = self.seeded[obj]
    207 
--> 208         built = model.builder.build(model, obj, *args, **kwargs)
    209         if self.build_callback is not None:
    210             self.build_callback(obj)

~/git/nengo/nengo/builder/builder.py in build(cls, model, obj, *args, **kwargs)
    225             raise BuildError("Cannot build object of type %r" % type(obj).__name__)
    226 
--> 227         return cls.builders[obj_cls](model, obj, *args, **kwargs)
    228 
    229     @classmethod

~/git/nengo-loihi/nengo_loihi/builder/connection.py in build_connection(model, conn)
     58 
     59     if pre_onchip and post_onchip:
---> 60         build_chip_connection(model, conn)
     61 
     62     elif not pre_onchip and post_onchip:

~/git/nengo-loihi/nengo_loihi/builder/connection.py in build_chip_connection(model, conn)
    654         gain = model.params[conn.post_obj.ensemble].gain
    655         loihi_weights = scale_matrix(loihi_weights, gain)
--> 656         syn.set_weights(loihi_weights)
    657         post_obj.add_synapse(syn)
    658         model.objs[conn]["weights"] = syn

~/git/nengo-loihi/nengo_loihi/block.py in set_weights(self, weights)
    681         self.format(
    682             compression=d(b"Mw==", int),
--> 683             idx_bits=self.idx_bits(),
    684             fanout_type=d(b"MQ==", int),
    685             n_synapses=d(b"NjM=", int),

~/git/nengo-loihi/nengo_loihi/block.py in idx_bits(self)
    618 
    619     def idx_bits(self):
--> 620         bits = int(np.ceil(np.log2(self.max_ind() + 1)))
    621         assert (
    622             bits <= SynapseConfig.INDEX_BITS_MAP[-1]

~/git/nengo-loihi/nengo_loihi/block.py in max_ind(self)
    632 
    633     def max_ind(self):
--> 634         return max(i.max() if len(i) > 0 else -1 for i in self.indices)
    635 
    636     def _set_weights_indices(self, weights, indices=None):

~/git/nengo-loihi/nengo_loihi/block.py in <genexpr>(.0)
    632 
    633     def max_ind(self):
--> 634         return max(i.max() if len(i) > 0 else -1 for i in self.indices)
    635 
    636     def _set_weights_indices(self, weights, indices=None):

~/.conda/envs/dev/lib/python3.5/site-packages/numpy/core/_methods.py in _amax(a, axis, out, keepdims, initial)
     26 def _amax(a, axis=None, out=None, keepdims=False,
     27           initial=_NoValue):
---> 28     return umr_maximum(a, axis, None, out, keepdims, initial)
     29 
     30 def _amin(a, axis=None, out=None, keepdims=False,

ValueError: zero-size array to reduction operation maximum which has no identity

This occurs for both the emulator and the actual hardware. If I change n_neurons to 1 I get a different error:

---------------------------------------------------------------------------
AssertionError                            Traceback (most recent call last)
<ipython-input-30-bdf99cfd8990> in <module>()
     11     nengo.Connection(x.neurons, y.neurons, transform=transform)
     12 
---> 13 with nengo_loihi.Simulator(model) as sim:
     14     pass

~/git/nengo-loihi/nengo_loihi/simulator.py in __init__(self, network, dt, seed, model, precompute, target, progress_bar, remove_passthrough, hardware_options)
    144 
    145         # Build the network into the model
--> 146         self.model.build(network)
    147 
    148         # Build the extra passthrough connections into the model

~/git/nengo-loihi/nengo_loihi/builder/builder.py in build(self, obj, *args, **kwargs)
    206             model.seeded[obj] = self.seeded[obj]
    207 
--> 208         built = model.builder.build(model, obj, *args, **kwargs)
    209         if self.build_callback is not None:
    210             self.build_callback(obj)

~/git/nengo/nengo/builder/builder.py in build(cls, model, obj, *args, **kwargs)
    225             raise BuildError("Cannot build object of type %r" % type(obj).__name__)
    226 
--> 227         return cls.builders[obj_cls](model, obj, *args, **kwargs)
    228 
    229     @classmethod

~/git/nengo/nengo/builder/network.py in build_network(model, network, progress)
     92             # TODO: Except perhaps if the connection being learned
     93             # is in a subnetwork?
---> 94             model.build(conn)
     95 
     96         logger.debug("Network step 4: Building probes")

~/git/nengo-loihi/nengo_loihi/builder/builder.py in build(self, obj, *args, **kwargs)
    206             model.seeded[obj] = self.seeded[obj]
    207 
--> 208         built = model.builder.build(model, obj, *args, **kwargs)
    209         if self.build_callback is not None:
    210             self.build_callback(obj)

~/git/nengo/nengo/builder/builder.py in build(cls, model, obj, *args, **kwargs)
    225             raise BuildError("Cannot build object of type %r" % type(obj).__name__)
    226 
--> 227         return cls.builders[obj_cls](model, obj, *args, **kwargs)
    228 
    229     @classmethod

~/git/nengo-loihi/nengo_loihi/builder/connection.py in build_connection(model, conn)
     58 
     59     if pre_onchip and post_onchip:
---> 60         build_chip_connection(model, conn)
     61 
     62     elif not pre_onchip and post_onchip:

~/git/nengo-loihi/nengo_loihi/builder/connection.py in build_chip_connection(model, conn)
    654         gain = model.params[conn.post_obj.ensemble].gain
    655         loihi_weights = scale_matrix(loihi_weights, gain)
--> 656         syn.set_weights(loihi_weights)
    657         post_obj.add_synapse(syn)
    658         model.objs[conn]["weights"] = syn

~/git/nengo-loihi/nengo_loihi/block.py in set_weights(self, weights)
    673         else:
    674             weights = np.array(weights, copy=False, dtype=np.float32)
--> 675             assert weights.ndim == 2
    676             indices = None
    677 

AssertionError: 

And if I change the simulator to nengo.Simulator then both work. This is using nengo==3.0.0.dev0 and nengo_loihi==0.9.0.dev0.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions