返回

使用Pytork为多个功能设置LSTM自动编码器

发布时间:2022-03-23 13:26:05 289

我正在建立一个LSTM自动编码器去噪信号,并将采取一个以上的功能,因为它的输入。

我已经按照如下方式设置了模型编码器部件,该部件适用于单特征输入(即仅具有一个特征的序列):

class Encoder(nn.Module):
    def __init__(self, seq_len, n_features, num_layers=1, embedding_dim=64):
        super(Encoder, self).__init__()
        
        self.seq_len = seq_len
        self.n_features = n_features
        self.num_layers = num_layers
        self.embedding_dim = embedding_dim
        self.hidden_dim = 2 * embedding_dim
        
        # input: batch_size, seq_len, features
        self.lstm1 = nn.LSTM(
            input_size=self.n_features, 
            hidden_size=self.hidden_dim, 
            num_layers=self.num_layers,
            batch_first=True
        ) # output: batch size, seq_len, hidden_dim 
        
        # input: batch_size, seq_len, hidden_dim
        self.lstm2 = nn.LSTM(
            input_size=self.hidden_dim,
            hidden_size = self.embedding_dim,
            num_layers = self.num_layers,
            batch_first=True    
        ) # output: batch_size, seq_len, embedding_dim
        
    def forward(self, x):
        print(x)
        x = x.reshape((1, self.seq_len, self.n_features))
        print(x.shape)
        
        x, (_, _) = self.lstm1(x)
        print(x.shape)
        x, (hidden_n, _) = self.lstm2(x)
        print(x.shape, hidden_n.shape)
        print(hidden_n)
        
        return hidden_n.reshape((self.n_features, self.embedding_dim))

当我按如下方式测试此设置时:

model = Encoder(1024, 1)
model.forward(torch.randn(1024, 1))

1代表一个单一的特征,一切都很好。但是,当我执行以下操作时(其中2代表由2个功能组成的序列):

model = Encoder(1024, 2)
model.forward(torch.randn(1024, 2))

我得到以下错误:

---------------------------------------------------------------------------
RuntimeError                              Traceback (most recent call last)
Input In [296], in ()
----> 1 model.forward(torch.randn(1024, 2))

Input In [294], in Encoder.forward(self, x)
     36         print(hidden_n)
     37 #         print(hidden_n.reshape((self.n_features, self.embedding_dim)).shape)
---> 39         return hidden_n.reshape((self.n_features, self.embedding_dim))

RuntimeError: shape '[2, 64]' is invalid for input of size 64

这个hidden_n形状显示为torch.Size([1, 1, 64]).我想了解,如果我们有不止一个功能,例如2个,我们是否希望将该形状转换为1, 2, 64这样隐藏状态对这两个特征都有权重?

有人能解释一下为什么重塑不喜欢我试图重组编码器输出的方式,以及我应该如何做,以便模型能够考虑任何特征尺寸。

我遗漏了什么/可能是误解了什么?

特别声明:以上内容(图片及文字)均为互联网收集或者用户上传发布,本站仅提供信息存储服务!如有侵权或有涉及法律问题请联系我们。
举报
评论区(0)
按点赞数排序
用户头像
相关帖子
下一篇
mysql-让所有用户加入 2022-03-23 13:25:28