Hello,
it seems like the nengo DL simulator cannot find the Node(s) I want to assign data to so that i can use batch processing.
here is a shortened overview of the relevant aspects of the code:
def create_model(seed=None):
global model
model = spa.SPA(seed=seed)
with model:
inputNode_first=nengo.Node(np.zeros(128*128))
inputNode_second=nengo.Node(np.zeros(128*128))
reactivate=nengo.Node(np.zeros(Nm))
if sim_to_run == 2:
create_model(seed=subj)
sim = nengo_dl.Simulator(network=model, minibatch_size=minibatch_size, seed=subj, device=device, progress_bar=False)
input_data_first, input_data_second, input_data_reactivate = get_data(minibatch_size,4600,probelist)
sim.run_steps(4600, data = {inputNode_first: input_data_first, inputNode_second: input_data_second, reactivate: input_data_reactivate})
I hope this is enough information, if not let me know.
The error message I get says: NameError: name 'inputNode_first' is not defined
I tried it by using: 'inputNode_first'
(passing it as a string like I normally would for the key of a dictionary) but then I get an error message saying:
"Data objects must be Nodes or Probes, not %s" % d, "data" nengo.exceptions.ValidationError: data: Data objects must be Nodes or Probes, not inputNode_first
I also tried using model.inputNode_first
but this also did not work and gave me the error message:
AttributeError: 'SPA' object has no attribute 'inputNode_first'
Could somebody explain to me what is going wrong?
I am using: Nengo 2.8.0, Nengo DL 2.2.2, python 3.6.7
Hello!
This error message is cropping up because you defined inputNode_first
inside a function, so later on outside of the function you don’t have access to it. Even though you declare model
as a global
, you haven’t attached inputNode_first
to model
, which is why you can’t access it as model.inputNode_first
.
In general, it’s recommended to return variables from functions using return var1, var2, etc
instead of declaring global variable. I’ve reworked your example below so that it runs:
import nengo_dl
import numpy as np
def create_model(seed=None):
model = nengo.Network()
with model:
model.inputNode_first = nengo.Node(np.zeros(128 * 128))
model.inputNode_second = nengo.Node(np.zeros(128 * 128))
model.reactivate = nengo.Node(np.zeros(10))
model.probe_reactivate = nengo.Probe(model.reactivate)
return model
subj = 0
model = create_model(seed=subj)
sim = nengo_dl.Simulator(
network=model,
minibatch_size=1,
seed=subj,
progress_bar=False,
)
n_timesteps = 1
input_data_first = input_data_second = np.ones((1, n_timesteps, 128**2))
input_data_reactivate = np.ones((1, n_timesteps, 10))
sim.run_steps(
n_timesteps,
data={
model.inputNode_first: input_data_first,
model.inputNode_second: input_data_second,
model.reactivate: input_data_reactivate,
},
)
print('probe_reactivate: ', sim.data[model.probe_reactivate])
Note that I changed it to model = nengo.Network()
and took out a few other parameters, these were just simplifications on my part to get this demo script running, this will work with any functioning Nengo network. Hope this helps!