LSTM模型的测试 理解

一 数据集的划分

test_data_size = 12
test_data = all_data[-test_data_size:]
train_data = all_data[:-test_data_size]
# 数据标准化
scaler = MinMaxScaler(feature_range=(-1, 1))
train_data_normalized = scaler.fit_transform(train_data.reshape(-1, 1))
train_data_normalized = torch.FloatTensor(train_data_normalized).view(-1)
test_inputs = train_data_normalized[-train_window:].tolist()  问 :这里为什么要用训练集的最后train——window(个)数据作为测试模型的输入?

答: 因为是一整个序列数据,说白了,只是一条依赖于时间变化的数据,所以我们需要将训练集的最后train_window个数据拿出来,输入给测试模型 ,否则测试模型哪里来的输入?

fut_pred = 12

for i in range(fut_pred):
    seq = torch.FloatTensor(test_inputs[-train_window:])
    print("这是送入测试模型的数据,用这些数据来预测测试集,这是数据:{0}".format(seq))
    with torch.no_grad():
        model.eval()  # 将模型设置为评估模式
        seq = seq.unsqueeze(0).unsqueeze(2)
        prediction = model(seq)  # 使用模型进行预测
        test_inputs.append(prediction.item())  # 将预测结果添加到列表中

问:为什么不能把fut_pred 直接用 test_data_size 代替?

答:不可以:fut_pred 只是一个标签,当用train_window 个数据去连续预测 fut_pred 个数据时,此时是不改变训练集的大小的。如果用data_size代替,就会改变测试集和训练集的大小。如果将test_data_size当做fut_pred去调解时,可能在训练模型时,会污染数据集。

      当在使用模型的时候,即既不是测试也不是在训练的时候,需要从行设置预测的长度 即是fut_pred,所以在测试的时候可以用 tset_data_size代替fut_pred,在使用的时候不行。

问:(test_inputs[-train_window:]) 为什么要在输入序里面去最后train_window个数据,作为模型的输入?

答:

        第一,将一个序列输入给训练好的模型时,模型只会输出一个数。而我们如果想让模型输出多个数,就需要多几次循环使用模型。

        第二,在每次循环使用模型时,需要传入不同的序列,否则输出的就是同一个值。我们需要将上一次模型的输入添加到输入列表中。用上一次模型输出的预测值,组成新的列表。再从新的列表里面取出倒数train_window个数 做为一次模型的输入。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值