LSTM mark select

I have question,answer pair data. After embedding and lstm, I want to calculate similarity between question and answer by hidden and embedding.
My data is pad to max_length which is 100. I want to select non padding term for calculating.

    qmask = (torch.zeros_like(q) != q).float()
    amask = (torch.zeros_like(a) != a).float()


    q_embed = self.drop(self.encoder(q))
    q = q_embed.permute(1, 0, 2)
    q_embed = q_embed.masked_select(
        qmask.unsqueeze(dim=2).expand_as(q_embed)
    )
    print('q_embed', q_embed.size())
    q_lstm_out, _ = self.bilstm(q, self.hidden)
    print('q_lstm_out', q_lstm_out.shape)
    q_lstm_out = q_lstm_out.masked_select(
        qmask.transpose(0, 1).unsqueeze(dim=2).expand_as(q_lstm_out)
    )

    a_embed = self.drop(self.encoder(a))
    a = a_embed.permute(1, 0, 2)
    a_embed = a_embed.masked_select(
        amask.unsqueeze(dim=2).expand_as(a_embed)
    )
    a_lstm_out, _ = self.bilstm(a, self.hidden)
    a_lstm_out = a_lstm_out.masked_select(
        amask.transpose(0, 1).unsqueeze(dim=2).expand_as(a_lstm_out)
    )

    m1 = torch.matmul(q_embed.transpose(1, 2).contiguous(), a_embed)  # seq_length * embedding * embedding
    m2 = torch.matmul(torch.matmul(torch.t(q_lstm_out).transpose(1, 2).contiguous(), self.A), a_lstm_out.transpose(0, 1).contiguous())
    concanated = self.drop(torch.stack((m1, m2), dim=1))

I use masked_select return 1D tensor. and it cann’t view back.