pytorch LSTM:https://pytorch.org/docs/stable/generated/torch.nn.LSTM.html
最近看 google 的论文 autopilot,讲的是怎么通过一个app的历史的资源使用数据,来预测这个app到底需要多少资源,才能满足其服务的正常运行
论文讲了2种方法,就是:
- 一种是传统的,对历史数据加权
- 一种是基于增强学习的,这个有点复杂,没太看懂
不过我有个疑问,像资源使用这种时序的数据,用 lstm 这种循环神经网络不是最简单吗?为什么要用增强学习这么复杂的东西(状态空间复杂,状态的迁移也复杂,并且需要更大的计算量)
所以我打算试试用 lstm 来实现长期的资源预测
我的数据样本:
20220510000000,38.388889 20220510003000,33.722222 20220510010000,31.538889 ... 20220510053000,31.183333 20220510060000,32.983333 20220510063000,36.694444
第一列是明文的时间,第二列是app的cpu使用
1. 思路
使用 lstm 有几个关键的地方:
- 定义好网络的输入输出,简单来说就是你希望神经网络帮你学习什么样的特征映射。
- 怎么实现长期预测
由于典型的 rnn 神经网络,是输入一串历史数据,输出下一个时刻的预测值。这是经典用法,可能也有一些方法,可以直接输出多个历史预测值的,不过我没研究过,这里不讨论
我的方法也比较简单,就是用预测出来的值作为神经网络的数据,继续滚动预测下一个值,通过这种方法,实现“长期”的预测
2. 网络(输入、输出)建模
首先要定义清楚网络的输入,输出是什么
由于经典的 rnn 只有一个输出,就是我们下一步要预测的值,所以这个没什么好讨论的
但是输入是可以多个的,你可以用当前最近的2个数据来预测下一个数据,也可以用当前10个数据预测下一个数据,也可以是N个。但是据我的实测观察来看,使用2个数据预测下一个数据效果好像更好一些
2个数据预测1个