weixin_43959300
weixin_43959300
采纳率50%
2020-05-31 21:21

LSTM/RNN 中的time_step到底如何设置?

新手尝试用LSTM进行字段分类, 数据集如下

Data ----- Label

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

然后我进行了编码:

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

接下来 我建造了网络:

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

        self.rnn = nn.LSTM(     
            input_size=20,     # 每个sample有20个feature
            hidden_size=64,     
            num_layers=1,       
            batch_first=True,   
        )

        self.out = nn.Linear(64, 2) # 2分类问题,所以output设置成了2

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

最后开始训练:

for epoch in range(EPOCH):
    for step, (x, b_y) in enumerate(train_loader):   # gives batch data
        b_x = x.view(-1, ?, ?)  
#这里的reshape我应该设置为多少? 按照教程,应该设置为(batch, time_step, input_size)的形式,因为我想让网络记住每个sample的feature的sequence,所以我把time_step设置成了20(一个sample有20个featur,最后我得到了(-1,20,20),但是会报错,然后我又改成了(-1,1,20), 这就没问题了,但是改成这样,是不是就没有记住feature的sequence?

        output = rnn(b_x)               
        loss = loss_func(output, b_y)   
        optimizer.zero_grad()          
        loss.backward()                 
        optimizer.step()
  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 复制链接分享
  • 邀请回答

1条回答

  • qq_39412061 吃鸡王者 1年前

    time_step 和input_size的乘积已经和你的一条语句的编码长度相同。
    感觉应该是这样处理的,你可以参考一下:
    编码后每条数据:
    [[0,0,0,1,1],[1,0,1,0,0],[0,0,0,1,0],[0,0,1,1,1] -----1

    输入数据的shape应该为:(N,4,5)

    time_step=4
    input_size=5

    点赞 1 评论 复制链接分享