Skip to content
This repository has been archived by the owner on Oct 31, 2023. It is now read-only.

IndexError:too many indices for tensor of dimension 1 #46

Open
1245994042 opened this issue Apr 15, 2019 · 16 comments
Open

IndexError:too many indices for tensor of dimension 1 #46

1245994042 opened this issue Apr 15, 2019 · 16 comments

Comments

@1245994042
Copy link

I used python 3.5 and pytorch 0.4.
At first, I got RuntimeError: dimension out of range (expected to be in range of [-1, 0], but got 1) at seq2seq.py, line 57, in get_dims
T_out = y.size(1) if y is not None else None
After i change seq2seq model line 173
if argmax:
_, cur_output = probs.max(1)
else:

to

if argmax:
_, cur_output = probs.max(1)
cur_output = cur_output.unsqueeze(0)
else:

as commented by manoja328, I got the IndexError : too many indices for tensor of dimension 1 ,at seq2seq.py, line 182,
in reinforce_sample y[:, t][not_done] = cur_output_data[not_done]

Thank you!

@GGaoYipeng
Copy link

I'm getting the same error.. Were you able to fix it ?

@1245994042
Copy link
Author

I'm getting the same error.. Were you able to fix it ?

sorry. I don't fix it. If u solve it, plz help me to do this.

@GGaoYipeng
Copy link

okay, I will try.

@1245994042
Copy link
Author

1245994042 commented Apr 21, 2019 via email

@GGaoYipeng
Copy link

I have sent an email to you.

@1245994042
Copy link
Author

我已向您发出电子邮件。

But i didn't get any email…

@yizhouzhao
Copy link

yizhouzhao commented May 1, 2019

change the seq2seq.py > function reinforce_sample > forloop into

for t in range(T):
# logprobs is N x 1 x V
logprobs, h, c = self.decoder(encoded, cur_input, h0=h, c0=c)
logprobs = logprobs / temperature
probs = F.softmax(logprobs.view(N, -1),dim=None) # Now N x V
if argmax:
_, cur_output = probs.max(1)
cur_output = cur_output.unsqueeze(0)
else:
cur_output = probs.multinomial() # Now N x 1
self.multinomial_outputs.append(cur_output)
self.multinomial_probs.append(probs)
cur_output_data = cur_output.data.cpu()
#not_done = logical_not(done)
not_done= np.where(done.data.cpu().numpy() == 0)
#y[:, t][not_done] = cur_output_data[not_done]
y[not_done, t] = cur_output_data[not_done]
done = logical_or(done, cur_output_data.cpu() == self.END)
cur_input = cur_output
if done.sum() == N:
break

@PuPuLL
Copy link

PuPuLL commented May 20, 2019

Hi
i got same issue
have u solve it ?
if you did plz let me know
Thanks!

@yizhouzhao
Copy link

@PuPuLL I have solved it. My above comment is the code. The problem is that the different supports of indexing a tensor array in Pytorch 0.1 and Pytorch 0.4.

@1245994042
Copy link
Author

@PuPuLL I have solved it. My above comment is the code. The problem is that the different supports of indexing a tensor array in Pytorch 0.1 and Pytorch 0.4.

OK,I will try it. Thx!

@1245994042
Copy link
Author

change the seq2seq.py > function reinforce_sample > forloop into

for t in range(T):

logprobs is N x 1 x V

logprobs, h, c = self.decoder(encoded, cur_input, h0=h, c0=c)
logprobs = logprobs / temperature
probs = F.softmax(logprobs.view(N, -1),dim=None) # Now N x V
if argmax:
_, cur_output = probs.max(1)
cur_output = cur_output.unsqueeze(0)
else:
cur_output = probs.multinomial() # Now N x 1
self.multinomial_outputs.append(cur_output)
self.multinomial_probs.append(probs)
cur_output_data = cur_output.data.cpu()
#not_done = logical_not(done)
not_done= np.where(done.data.cpu().numpy() == 0)
#y[:, t][not_done] = cur_output_data[not_done]
y[not_done, t] = cur_output_data[not_done]
done = logical_or(done, cur_output_data.cpu() == self.END)
cur_input = cur_output
if done.sum() == N:
break

sorry,I just got the message.
Thx!

@PuPuLL
Copy link

PuPuLL commented May 27, 2019

@PuPuLL I have solved it. My above comment is the code. The problem is that the different supports of indexing a tensor array in Pytorch 0.1 and Pytorch 0.4.

that works! thank you

@AishaAlaagib
Copy link

Hi,

I am using python 3.4 and pytorch 1.1.0
I got the same error like yours and I fix it after I got error

Traceback (most recent call last):
File "clevr-iep/iep/train_model.py", line 490, in
main(args)
File "clevr-iep/iep/train_model.py", line 151, in main
train_loop(args, train_loader, val_loader)
File "clevr-iep/iep/train_model.py", line 240, in train_loop
scores = execution_engine(feats_var, programs_pred)
File "/home/aalaagib/anaconda3/lib/python3.7/site-packages/torch/nn/modules/module.py", line 493, in call
result = self.forward(*input, **kwargs)
File "/home/aalaagib/data/clevr-iep/iep/models/module_net.py", line 239, in forward
final_module_outputs = self._forward_modules_json(feats, program)
File "/home/aalaagib/data/clevr-iep/iep/models/module_net.py", line 171, in _forward_modules_json
f_str = programs.function_to_str(f)
File "/home/aalaagib/data/clevr-iep/iep/programs.py", line 129, in function_to_str
if f['value_inputs']:
IndexError: too many indices for tensor of dimension 1

I have print f which is
tensor([28, 4, 21, 35, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], device='cuda:0')
I hope if someone can help me
Thanks.

@jcjohnson
Copy link
Contributor

@AishaAlaagib The underlying root cause here is that this code was written using a very old version of PyTorch (I think maybe 0.2?), and there have been a bunch of breaking changes to PyTorch since then which means that the code makes many assumptions about the shapes and types of tensors which will not hold in more recent PyTorch releases.

For this error in particular, the module network implements forward passes for a couple different types of program representations, and tries to route to the correct implementation based on the type and shape of the program object: https://github.com/facebookresearch/clevr-iep/blob/master/iep/models/module_net.py#L233.

In this case, it looks like this line got executed: https://github.com/facebookresearch/clevr-iep/blob/master/iep/models/module_net.py#L234 (which expects the program to be in some JSON format); however based on your output from print(f) I think your program is actually a 2D tensor, so this line should have executed: https://github.com/facebookresearch/clevr-iep/blob/master/iep/models/module_net.py#L236 (which assumes the program is stored as a tensor).

You should debug around here to see why the wrong branch of this condition executed.

@AishaAlaagib
Copy link

@jcjohnson Thanks alot. you are right the problem in the pytorch version.
I have reshape the program first and made this change
elif type(program) is torch.Tensor and program.dim() <= 2:
final_module_outputs = self._forward_modules_ints(feats, program)

So it works now. Thanks again.

@luyishisi
Copy link

我解决了这个问题,现在他可以很好的run在torch1.7 以及cuda 11以上版本了
I solved this problem, now he can run well on torch1.7 and cuda 11 and above
https://github.com/luyishisi/clevr-iep

Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
None yet
Projects
None yet
Development

No branches or pull requests

7 participants