wesselb / neuralprocesses

A framework for composing Neural Processes in Python
https://wesselb.github.io/neuralprocesses
MIT License
76 stars 12 forks source link

Expected not a parallel of elements, but got inputs and outputs in parallel. #23

Closed nilsleh closed 5 months ago

nilsleh commented 5 months ago

I am using Deepsensor to run experiments with Neural Processes but am running into an error that I cannot figure out / interpret properly, namely

AssertionError: Expected not a parallel of elements, but got inputs and outputs in parallel.

Full Stacktrace ```python File "/opt/anaconda3/envs/oceanEnv/lib/python3.10/site-packages/deepsensor/train/train.py", line 116, in train_step task_losses.append(model.loss_fn(task, normalise=True)) File "/opt/anaconda3/envs/oceanEnv/lib/python3.10/site-packages/deepsensor/model/convnp.py", line 870, in loss_fn logpdfs = backend.nps.loglik( File "/opt/anaconda3/envs/oceanEnv/lib/python3.10/site-packages/plum/function.py", line 399, in __call__ return _convert(method(*args, **kw_args), return_type) File "/opt/anaconda3/envs/oceanEnv/lib/python3.10/site-packages/neuralprocesses/model/loglik.py", line 113, in loglik state, logpdfs = loglik(state, model, *args, **kw_args) File "/opt/anaconda3/envs/oceanEnv/lib/python3.10/site-packages/plum/function.py", line 399, in __call__ return _convert(method(*args, **kw_args), return_type) File "/opt/anaconda3/envs/oceanEnv/lib/python3.10/site-packages/neuralprocesses/model/loglik.py", line 64, in loglik state, pred = model( File "/opt/anaconda3/envs/oceanEnv/lib/python3.10/site-packages/plum/function.py", line 489, in __call__ return self._f(self._instance, *args, **kw_args) File "/opt/anaconda3/envs/oceanEnv/lib/python3.10/site-packages/plum/function.py", line 399, in __call__ return _convert(method(*args, **kw_args), return_type) File "/opt/anaconda3/envs/oceanEnv/lib/python3.10/site-packages/neuralprocesses/model/model.py", line 101, in __call__ return self( File "/opt/anaconda3/envs/oceanEnv/lib/python3.10/site-packages/plum/function.py", line 489, in __call__ return self._f(self._instance, *args, **kw_args) File "/opt/anaconda3/envs/oceanEnv/lib/python3.10/site-packages/plum/function.py", line 399, in __call__ return _convert(method(*args, **kw_args), return_type) File "/opt/anaconda3/envs/oceanEnv/lib/python3.10/site-packages/neuralprocesses/model/model.py", line 72, in __call__ xz, pz = code(self.encoder, xc, yc, xt, root=True, **enc_kw_args) File "/opt/anaconda3/envs/oceanEnv/lib/python3.10/site-packages/plum/function.py", line 399, in __call__ return _convert(method(*args, **kw_args), return_type) File "/opt/anaconda3/envs/oceanEnv/lib/python3.10/site-packages/neuralprocesses/__init__.py", line 21, in f_wrapped return f(*args, **kw_args) File "/opt/anaconda3/envs/oceanEnv/lib/python3.10/site-packages/neuralprocesses/coders/functional.py", line 39, in code return code(coder.coder, xz, z, x, **kw_args) File "/opt/anaconda3/envs/oceanEnv/lib/python3.10/site-packages/plum/function.py", line 399, in __call__ return _convert(method(*args, **kw_args), return_type) File "/opt/anaconda3/envs/oceanEnv/lib/python3.10/site-packages/neuralprocesses/__init__.py", line 21, in f_wrapped return f(*args, **kw_args) File "/opt/anaconda3/envs/oceanEnv/lib/python3.10/site-packages/neuralprocesses/chain.py", line 56, in code xz, z = code(link, xz, z, x, **kw_args) File "/opt/anaconda3/envs/oceanEnv/lib/python3.10/site-packages/plum/function.py", line 399, in __call__ return _convert(method(*args, **kw_args), return_type) File "/opt/anaconda3/envs/oceanEnv/lib/python3.10/site-packages/neuralprocesses/__init__.py", line 21, in f_wrapped return f(*args, **kw_args) File "/opt/anaconda3/envs/oceanEnv/lib/python3.10/site-packages/neuralprocesses/chain.py", line 56, in code xz, z = code(link, xz, z, x, **kw_args) File "/opt/anaconda3/envs/oceanEnv/lib/python3.10/site-packages/plum/function.py", line 399, in __call__ return _convert(method(*args, **kw_args), return_type) File "/opt/anaconda3/envs/oceanEnv/lib/python3.10/site-packages/neuralprocesses/__init__.py", line 21, in f_wrapped return f(*args, **kw_args) File "/opt/anaconda3/envs/oceanEnv/lib/python3.10/site-packages/neuralprocesses/coders/shaping.py", line 179, in code raise AssertionError( AssertionError: Expected not a parallel of elements, but got inputs and outputs in parallel. ```

I am guessing that I am doing something wrong with the data loading, however, I am not sure exactly how and was wondering if you could give me a hint based on the error. I made this gist and optionally also the actual data. Thanks in advance!

wesselb commented 5 months ago

Hey @nilsleh,

It looks like the model wasn't configured correctly for the shape of the data. The error comes from feeding the model multiple data sources when it is only configured for one.

I currently can't look at the example in detail, but should be able to have a closer look next week.

@tom-andersson, would you be able to have a look at the gist to see if there is any misconfiguration?

nilsleh commented 5 months ago

Thanks that actually pointed me in the right direction and I could figure out my mistake!

wesselb commented 5 months ago

@nilsleh Ah, that’s great to hear!! Would you be able to describe here what was wrong, for future reference :)?

nilsleh commented 5 months ago

Ah sorry, of course. I had forgotten to pass in the task_loader as an argument to the ConvNP model as I was using multiple context sets. And that just initializes a model with default parameters than then result in a mismatch, when you try to pass in your "actual" data.

wesselb commented 5 months ago

That makes a lot of sense. Subtle! Thanks! :)

tom-andersson commented 4 months ago

Glad this was solved, thanks for looking at this @wesselb!