DeepRL-Grounding icon indicating copy to clipboard operation
DeepRL-Grounding copied to clipboard

Dimension Error in Inference

Open Mrs-Hudson opened this issue 7 years ago • 3 comments

Hi

I was trying to run ' python a3c_main.py --evaluate 2 --load saved/pretrained_model' to run inference using the pre-trained model. However, I faced the following dimension error without changing the code:

File "/home/rparik/Downloads/Documents/CMU/Fall18/multi-modal/project/baselines/DeepRL-Grounding/models.py", line 88, in forward
  _, encoder_hidden = self.gru(word_embedding, encoder_hidden)
File "/home/rparik/anaconda3/lib/python3.6/site-packages/torch/nn/modules/module.py", line 477, in __call__
  result = self.forward(*input, **kwargs)
File "/home/rparik/anaconda3/lib/python3.6/site-packages/torch/nn/modules/rnn.py", line 178, in forward
  self.check_forward_args(input, hx, batch_sizes)
File "/home/rparik/anaconda3/lib/python3.6/site-packages/torch/nn/modules/rnn.py", line 126, in check_forward_args
  expected_input_dim, input.dim()))
RuntimeError: input must have 3 dimensions, got 2

Any leads would be appreciated

Mrs-Hudson avatar Nov 25 '18 05:11 Mrs-Hudson

Hi

I was trying to run ' python a3c_main.py --evaluate 2 --load saved/pretrained_model' to run inference using the pre-trained model. However, I faced the following dimension error without changing the code:

File "/home/rparik/Downloads/Documents/CMU/Fall18/multi-modal/project/baselines/DeepRL-Grounding/models.py", line 88, in forward
  _, encoder_hidden = self.gru(word_embedding, encoder_hidden)
File "/home/rparik/anaconda3/lib/python3.6/site-packages/torch/nn/modules/module.py", line 477, in __call__
  result = self.forward(*input, **kwargs)
File "/home/rparik/anaconda3/lib/python3.6/site-packages/torch/nn/modules/rnn.py", line 178, in forward
  self.check_forward_args(input, hx, batch_sizes)
File "/home/rparik/anaconda3/lib/python3.6/site-packages/torch/nn/modules/rnn.py", line 126, in check_forward_args
  expected_input_dim, input.dim()))
RuntimeError: input must have 3 dimensions, got 2

Any leads would be appreciated

I got the same error as yours before, the error occurred just because the codes should run with older version of pytorch (at least before 0.4.0, maybe 0.3.1 I guess...You have to notice that the last modification of the project is 8 months ago ) , and then it fixed when I changed pytorch version. Hope to help you!

helenalee16888 avatar Nov 29 '18 14:11 helenalee16888

Yep this is relative to the version of Pytorch. More specifically, you may modify some code of definition of hidden state and input about GRU. I post my modified forward function here, wish this helps

self.gru = nn.GRUCell(32, self.gru_hidden_size)
def forward(self, inputs):

        x, input_inst, (tx, hx, cx) = inputs

        # Get the image representation
        x = F.relu(self.conv1(x))
        x = F.relu(self.conv2(x))
        x_image_rep = F.relu(self.conv3(x))

        # Get the instruction representation
        encoder_hidden = torch.zeros(1, self.gru_hidden_size)  # seq_len=1
        for i in range(input_inst.data.size(1)):
            word_embedding = self.embedding(input_inst[0, i]).unsqueeze(0)
            #print(word_embedding.shape)  # [1, 32]
            encoder_hidden = self.gru(word_embedding, encoder_hidden)
        x_instr_rep = encoder_hidden.view(-1, encoder_hidden.size(1))
        # print(x_instr_rep.shape)
        # Get the attention vector from the instruction representation
        x_attention = torch.sigmoid(self.attn_linear(x_instr_rep))

        # Gated-Attention
        x_attention = x_attention.unsqueeze(2).unsqueeze(3)
        x_attention = x_attention.expand(1, 64, 8, 17)
        assert x_image_rep.size() == x_attention.size()
        x = x_image_rep*x_attention
        x = x.view(x.size(0), -1)

        # A3C-LSTM
        x = F.relu(self.linear(x))
        hx, cx = self.lstm(x, (hx, cx))
        time_emb = self.time_emb_layer(tx)
        x = torch.cat((hx, time_emb.view(-1, self.time_emb_dim)), 1)

        return self.critic_linear(x), self.actor_linear(x), (hx, cx)

egg-west avatar Mar 18 '19 05:03 egg-west

@egg-west when I modified the code accordding to your replay, I got another error:

  File "a3c_main.py", line 115, in <module>
    torch.load(args.load, map_location=lambda storage, loc: storage))
  File "/home/yunlian/virtualenvs/python3.7/lib/python3.7/site-packages/torch/nn/modules/module.py", line 839, in load_state_dict
    self.__class__.__name__, "\n\t".join(error_msgs)))
RuntimeError: Error(s) in loading state_dict for A3C_LSTM_GA:
        Missing key(s) in state_dict: "gru.weight_ih", "gru.weight_hh", "gru.bias_ih", "gru.bias_hh".
        Unexpected key(s) in state_dict: "gru.weight_ih_l0", "gru.weight_hh_l0", "gru.bias_ih_l0", "gru.bias_hh_l0".

YunlianMoon avatar Dec 18 '19 09:12 YunlianMoon