@xlsd1996
2020-10-13T08:40:11.000000Z
字数 1597
阅读 444
未分类
GMAN能输出标准值但是预测的有问题,每个数据预测的12个时间片一模一样
阅读源码,检查的过程中顺便解决输出标准值的问题
Gman的X经过了归一化,但是pred却是标准值,模型的最后接了fc?
没错,GMAN的最后接了FC,激活用的relu保留了大于0的部分,再看一下DSAN最后一层的激活?是tanh,值域在-1,1之间
所以接下来的疑问是,DSAN怎么求到标准值之下的RMSE的?检查下test脚本最后有没有转回标准值
'test_threshold': [10, 10], DSAN为test设置的阈值是10?有点奇怪,说明test时模型输出的正常值?
想要解决这个问题,用原始的数据调试一次是最合适的,就是有点麻烦
DSAN model 必定只能输出小数值
查data_max就行了
原来DSAN是训练过程中打印的loss不乘datamax,eval过程才打印
还原DSAN并开始训练,然后检查GMAN
intransition,outtransition为啥最大值不一样?可能需要看一眼STDN的论文
DSAN训练过程提高loss打印频率,loss显示乘上datamax
GMAN输出的每个时间片上的数据相同
猜想:初始化有问题? 结构有问题?
@tf.function 中不应该出现变量初始化
貌似找到问题了
# timeofday = (Time.hour * 3600 + Time.minute * 60 + Time.second) \
# // Time.freq.delta.total_seconds()
这里要归一化但是我没看见
数据的index读取出来是这个,更本用不了
pandas.core.indexes.datetimes.DatetimeIndex
这个数据里存放的index包含了老版本的时间freq,二进制数据现在解析不了了,验证了是5分钟
pd.Series(pd.period_range('1/1/2011', freq='5 min', periods=3))
加上了时间片的归一化,终于可以训练了

10-13对比结果
| Model/RMSE | inflow(30min,3hour,6hour) | outflow(30min,3hour,6hour) |
|---|---|---|
| LSTM | 32.96 | 30.04 | 30.33 | 33.89 | 31.35 | 31.68 |
| STGCN | 26.18 | 32.5 | 39.08 | 28.04 | 32.90 | 37.37 |
| DSAN | 10.83 | 52.27 | 81.58 | 16.11 | 76.50 | 94.06 |
| GMAN | 18.88 | 20.55 | 21.49 | 22.05 | 22.25 | 23.22 |
| OD-simple | 10.13 | 3.77 | 4.07 | 10.33 | 4.64 | 4.83 |


DSAN的值太差了,怀疑是时空编码信息没有用上,ex那个我现在是直接初始化成全0的。
但是论文里没怎么看见怎么算出STPE的?
dae_inp_ex: external information. If you don't have any, just use the one-hot time information vectors, shape: (batch_size, his_time_step, one_hot)
原始数据的额外信息宽度是65,就没看到代码里有65这个长度?
写的弱智分布式训练的没法调试,改过才能调试,
pytorch 写多了被tf给坑了,tf.keras.layers.dense不用显示指定input的维度,只需要指定每一层的输出维度就行了,
但是这不是earger模式吗?
难道是tf.Dataset推倒出来ex的宽度是65?
而且ex_encoder的输入是个三维矩阵??
ex里面是什么根本没说清楚
需要时间one-hot编码 按照GMAN给就好了,正好自己的模型里也用的到
weekday 0-6 hour 0-23
这次DSAN应该没问题了,侧面证明了时间信息的重要性远比空间信息重要,这个也比较符合实际的预测情况。