weixin_43959300 2020-05-31 21:21 采纳率: 0%
浏览 1398
已采纳

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条回答 默认 最新

  • 吃鸡王者 2020-06-01 15:13
    关注

    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

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 VS2022+WDK驱动开发环境
  • ¥30 关于#java#的问题,请各位专家解答!
  • ¥30 vue+element根据数据循环生成多个table,如何实现最后一列 平均分合并
  • ¥20 pcf8563时钟芯片不启振
  • ¥20 pip2.40更新pip2.43时报错
  • ¥15 换yum源但仍然用不了httpd
  • ¥50 C# 使用DEVMOD设置打印机首选项
  • ¥15 麒麟V10 arm安装gdal
  • ¥20 OPENVPN连接问题
  • ¥15 flask实现搜索框访问数据库