【问题解决】Keras实现LSTM回归模型预测结果为相同常数解决方式

遇见问题

在用keras实现对某数据利用LSTM做时间序列回归的任务时,若loss出现以下情况:这里写图片描述
注意其loss(此处用mean square error作为loss function)在很大的时候就收敛了,且预测值出现下面的情况:
这里写图片描述

问题解决——属性标准化attribute normalization或scaling

对输入数据进行特征标准化,即将输入数据的每个数据的均值变为0,方差变为1。可使用sklearn.preprocessing.scale(或直接减均值除标准差),设数据集样本数为n,每个样本维度(属性个数)为dim,train_x.shape=(n=10,dim=5),则代码如下:

from sklearn.preporcessing import scale

train_x = preprocessing.scale(train_x,axis=1)
print(train_x.mean(axis=1),len(train_x.mean(axis=1)))
print(train_x.var(axis=1),len(train_x.var(axis=1)))

输出为

[1.00981526e-16  3.12124716e-16 1.28521942e-16 -5.50808322e-17 -1.74422635e-16 4.23235827e-16 1.00981526e-16  3.12124716e-16 1.28521942e-16 -5.50808322e-17]  10 //都为非常接近0的值
[1. 1. 1. 1. 1. 1. 1. 1. 1. 1.] 10 //即输出长度与数据长度相等

若train_x.shape为(dim,n)则上面代码中axis=0。其它设置不变,在进行运算可以得到loss以及预测值情况:
这里写图片描述
这里写图片描述
可以看到loss在更低处收敛且预测效果不再为常数。

这一部分的参考:
[1]https://github.com/keras-team/keras/issues/1727
[2]https://www.cnblogs.com/chaosimple/p/4153167.html

简单说说原理

目前本人有下面两种理解:
一、与输入数据的属性之间的数量级有关。scale可以将量级差过于大的伸缩到合适的分布,使得模型在训练时权重更加容易和稳定地学习。设一数据样本x=[attribute1,attribute2]=[[0.1,300],[0.2,200],[0.3,100]],当计算最简单的线性回归时,以x0=[0.1,300]为例:

  • 16
    点赞
  • 45
    收藏
    觉得还不错? 一键收藏
  • 8
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值