阿麥Mai 2023-08-13 14:02 采纳率: 57.1%
浏览 5
已结题

GRU时间序列未来预测的问题

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 中

报错如下:

img

  • 写回答

1条回答 默认 最新

  • CSDN-Ada助手 CSDN-AI 官方账号 2023-08-13 16:12
    关注

    【以下回答由 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对象。

    如果您在修改代码后仍然遇到维度不匹配的错误,请提供完整的报错信息以便我更好地帮助您解决问题。


    如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^
    评论

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 8月14日
  • 创建了问题 8月13日

悬赏问题

  • ¥15 UCOSⅢ,3.0.3升级为3.0.4后程序编译成功,但是运行后死在统计任务的地方
  • ¥15 python程序长时间运行卡死,付费求解决方案
  • ¥20 VM打开不了ubuntu虚拟机,如何解决?
  • ¥15 java请求一个返回流式数据的接口,如何将流式数据直接返回前端
  • ¥15 为什么连接不了啊,配置都没问题啊
  • ¥15 c语言做一个简单的计算器,大家来看看
  • ¥15 nuxtjs3+ts 报错,急呀!
  • ¥15 matlab矩阵复数本征值排序
  • ¥15 skynet MySQL ProtocolBuffers
  • ¥15 浏览器关闭事件有时没执行怎么回事