Time_step of LSTM in classification

Hello everyone,

I am now dealing with string classification, and I want to use LSTM, but I have some questions about setting time_step. My data set looks like:

Data ----- Label

DKWL----0
FCHN----0
KDQP----0
IHGS----1
....

then I convert it into binary code:


00011101000001000111-----1
.....
shape:(N,20)

Now I build LSTM:

class RNN(nn.Module):
    def __init__(self):
        super(RNN, self).__init__()

        self.rnn = nn.LSTM(     
            input_size=20,     # Each sample has 20 features 
            hidden_size=64,     
            num_layers=1,       
            batch_first=True,   
        )

        self.out = nn.Linear(64, 2) # I set output 2, because there are two classes 0 & 1

    def forward(self, x):
        r_out, (h_n, h_c) = self.rnn(x, None)   
        out = self.out(r_out[:, -1, :])
        return out

Then I try to train it with following codes:

for epoch in range(EPOCH):
    for step, (x, b_y) in enumerate(train_loader):   # gives batch data
        b_x = x.view(-1, ?, 20)   # at this step I need to reshape x to
                                  # (batch, time_step, input_size), but how I set this 
                                  # time_step? 0 or 1?
        output = rnn(b_x)               
        loss = loss_func(output, b_y)   
        optimizer.zero_grad()          
        loss.backward()                 
        optimizer.step()  

Thanks in advance.

I’m not sure to fully understand the use case.
How is dim1 defined in your input of shape [N, 20]? Is it the feature or temporal dimension?

In the first case, you should use x.view(-1, 1, 20), while in the latter x.view(-1, 20, 1).
Based on the definition of your LSTM, it seems that the first approach would be the valid one.