Probably a trivial question, but I’ve been unable to figure out how to use a Nengo Node to feed an image (or a different image for each timestep) to the network. Code looks something like this
def image(t):
return np.random.randn((32,32))
with nengo.Network() as model:
N1 = nengo.Ensemble(32, dimensions=2)
input_ = nengo.Node(image)
nengo.Connection(input_,N1)
I get the error “Node output must be a vector (got shape (32,32)”
If I try and flatten the image in the image() function, I get “function output size is incorrect; should return vector of size 1”.
How can I resolve this?
Thanks a lot!
You’re right that you need to flatten the image. The second error is probably because you were connecting to N1
(which uses the encoded vector space, where you’d set dimensions=1
), rather than the neuron space (N1.neurons
). Something like this should work:
def image(t):
return np.random.randn((32,32)).flatten()
with nengo.Network() as model:
N1 = nengo.Ensemble(1024, dimensions=1)
input_ = nengo.Node(image)
nengo.Connection(input_, N1.neurons)
Note that the dimensions=1
argument doesn’t really matter here, since we’re connecting directly to the neurons.
Thanks a lot, it works! Is it possible to use a 2D image as input in general, i.e. without flattening it?
Not at the moment, in Nengo all values must be vectors. But it’s something we’re thinking about adding to the API!