问题描述
我正在构建一个时间序列预测模型,输入序列长度为 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 (将#修改为@)