'PoissonEncoder' object is not callable
Closed this issue · 2 comments
PikaPei commented
Hello,
When I ran this example https://github.com/brainpy/examples/blob/main/brain_inspired_computing/mnist_lif_readout.py, the error showed:
Namespace(T=100, platform='cpu', batch=64, epochs=15, out_dir='./logs', lr=0.001, tau=2.0)
Traceback (most recent call last):
File "/Users/pei/Downloads/mnist_lif_readout.py", line 103, in <module>
l, correct_num = train(X, Y)
^^^^^^^^^^^
File "/Users/pei/.pyenv/versions/mambaforge-22.9.0-2/envs/brainpy-env/lib/python3.11/site-packages/brainpy/_src/math/object_transform/jit.py", line 208, in __call__
rets = self._get_transform(*args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/Users/pei/.pyenv/versions/mambaforge-22.9.0-2/envs/brainpy-env/lib/python3.11/site-packages/brainpy/_src/math/object_transform/jit.py", line 155, in _get_transform
self._dyn_vars, rets = evaluate_dyn_vars(
^^^^^^^^^^^^^^^^^^
File "/Users/pei/.pyenv/versions/mambaforge-22.9.0-2/envs/brainpy-env/lib/python3.11/site-packages/brainpy/_src/math/object_transform/tools.py", line 101, in evaluate_dyn_vars
rets = jax.eval_shape(f2, *args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/Users/pei/Downloads/mnist_lif_readout.py", line 86, in train
grads, l, n = grad_fun(xs, ys)
^^^^^^^^^^^^^^^^
File "/Users/pei/.pyenv/versions/mambaforge-22.9.0-2/envs/brainpy-env/lib/python3.11/site-packages/brainpy/_src/math/object_transform/autograd.py", line 209, in __call__
rets = self._transform(
^^^^^^^^^^^^^^^^
File "/Users/pei/.pyenv/versions/mambaforge-22.9.0-2/envs/brainpy-env/lib/python3.11/site-packages/brainpy/_src/math/object_transform/autograd.py", line 133, in _f_grad_with_aux_to_transform
outputs = self.target(*args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/Users/pei/Downloads/mnist_lif_readout.py", line 65, in loss_fun
xs = encoder(xs, num_step=args.T)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^
TypeError: 'PoissonEncoder' object is not callable
Any help would be appreciated. Thank you!
chaoming0625 commented
Thanks for the report. The API of PoissonEncoder
has changed. Currently, We can use:
xs = encoder.multi_steps(xs, n_time=args.T * bm.get_dt())
Particularly, .single_step()
generates a single step output, while .multi_steps()
generate spikes at multiple steps according to the inputs.
chaoming0625 commented
I have also fixed the error in the original implementation code. See the file for the details.