GRU预测代码如下,想实现通过取前n_train天数据预测predict_len天数,比如我要用前8天的数据预测后面22天的数据,但是用前8天的数据,会报错输出数据与输入的维度不一致,应该怎么解决?
# 预测未来数据
net.eval()
state = None
with torch.no_grad():
y_list, y_hat_list = [], []
y_list.append(all_data * (max_data - min_data) + min_data)
for i in range(1, n_train): # 取n_train天数据
inputs = test_x[i - 1, 0].unsqueeze(1).unsqueeze(1)
pred = inputs.squeeze().cpu().numpy().flatten() * (max_data - min_data) + min_data
y_hat_list.append(pred)
for i in range(n_train, predict_len + n_train + 1): # 预测predict_len天数据
inputs = torch.tensor(y_hat_list[-i:]).unsqueeze(1).float().to(device)
output, state = net(inputs, state)
pred = output.squeeze().cpu().numpy().flatten() * (max_data - min_data) + min_data
y_hat_list.append(pred)
print(f"第{i}天预测值:{pred.round(2)}")
y_hat_list.append(pd.Series([pred], index=range(len(pred)))) # 将预测值转换为 Pandas Series 对象并添加到 y_list 中
报错如下:
【以下回答由 GPT 生成】
根据您提供的代码和描述,问题似乎出现在最后一行的代码中。在该行代码中,您尝试将预测值转换为Pandas Series对象并将其添加到y_list列表中。但是,这里有两个问题: 1. pred
是一个numpy数组,无需将其包装在一个列表中,直接将其添加到y_list中即可。 2. 您使用了append
方法两次,将同一个预测值添加到了y_hat_list列表中。这可能会导致维度不匹配的错误。
以下是修复后的代码:
# 预测未来数据
net.eval()
state = None
with torch.no_grad():
y_list, y_hat_list = [], []
y_list.append(all_data * (max_data - min_data) + min_data)
for i in range(1, n_train): # 取n_train天数据
inputs = test_x[i - 1, 0].unsqueeze(1).unsqueeze(1)
pred = inputs.squeeze().cpu().numpy().flatten() * (max_data - min_data) + min_data
y_hat_list.append(pred)
for i in range(n_train, predict_len + n_train + 1): # 预测predict_len天数据
inputs = torch.tensor(y_hat_list[-n_train:]).unsqueeze(1).float().to(device)
output, state = net(inputs, state)
pred = output.squeeze().cpu().numpy().flatten() * (max_data - min_data) + min_data
print(f"第{i}天的预测值:{pred.round(2)}")
y_list.append(pred)
y_list = pd.Series(y_list, index=range(len(y_list))) # 将y_list转换为 Pandas Series 对象
修改后的代码移除了多余的append
操作。请注意,我删除了无关的y_hat_list添加操作,并将预测结果直接添加到y_list中。此外,我在循环之外将y_list转换为Pandas Series对象。
如果您在修改代码后仍然遇到维度不匹配的错误,请提供完整的报错信息以便我更好地帮助您解决问题。