时间序列预测pytorch Encoder Decoder序列到序列模型

问题描述

我正在构建一个时间序列预测模型,输入序列长度为 180,目标序列长度为 60。

输入形状为 [800,180,1] 800 个数据点,180 个特征,

目标形状是 [800,60,1] 800 个数据点 60 个特征

使用数据加载器处理输入和目标,批量大小为 4..

输入被重塑为输入形状 [180,1,1]

targetshape [60,1] 每批

#Encoder Decoder Model
MAX_OUTPUT = 60

class Forecast_EncoderDecoder(nn.Module):
    
    def __init__(self,input_size,hidden_size,output_size,dropout,verbose=False):
        super(Forecast_EncoderDecoder,self).@R_502_3151@
        
        self.hidden_size = hidden_size
        self.output_size = output_size
        self.dropout = nn.Dropout(dropout)
#         self.n_layers = n_layers
        
        self.encoder_rnn_cell = nn.GRU(input_size,dropout=dropout)
        
        self.decoder_rnn_cell = nn.GRU(output_size,dropout=dropout)
  
        
        self.h2o = nn.Linear(hidden_size,output_size)        
        self.verbose = verbose
        
    def forward(self,input,max_output = MAX_OUTPUT,device = 'cpu',ground_truth = None):
        
        # encoder
        out,hidden = self.encoder_rnn_cell(input)

        
        if self.verbose:
            print('Encoder input',input.shape)
            print('Encoder output',out.shape)
            print('Encoder hidden',hidden.shape)
        
        # decoder
        decoder_state = hidden.reshape((1,self.hidden_size))
        decoder_input = torch.zeros(1,self.output_size).to(device)

        outputs = []
        
        if self.verbose:
            print('Decoder state',decoder_state.shape)
            print('Decoder input',decoder_input.shape)
        
        for i in range(max_output):
            out,decoder_state = self.decoder_rnn_cell(decoder_input,decoder_state)
            
            if self.verbose:
                print('Decoder intermediate output',out.shape)
                    
            out = self.h2o(decoder_state)
            outputs.append(out.reshape(1))
            
            if self.verbose:
                print('Decoder output',out.shape)
            
            max_idx = out 

            if not ground_truth is None:
                max_idx = ground_truth[i].reshape(1,1)
#                 max_idx = max_idx.to(torch.long)
            
            decoder_input = max_idx.detach()  
#             print('decoder_input',decoder_input.shape)
        return outputs

请帮助我,如果我的输入/输出形状和架构正确?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)