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

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 HFSS 中的 H 场图与 MATLAB 中绘制的 B1 场 部分对应不上
  • ¥15 如何在scanpy上做差异基因和通路富集?
  • ¥20 关于#硬件工程#的问题,请各位专家解答!
  • ¥15 关于#matlab#的问题:期望的系统闭环传递函数为G(s)=wn^2/s^2+2¢wn+wn^2阻尼系数¢=0.707,使系统具有较小的超调量
  • ¥15 FLUENT如何实现在堆积颗粒的上表面加载高斯热源
  • ¥30 截图中的mathematics程序转换成matlab
  • ¥15 动力学代码报错,维度不匹配
  • ¥15 Power query添加列问题
  • ¥50 Kubernetes&Fission&Eleasticsearch
  • ¥15 報錯:Person is not mapped,如何解決?