我正在尝试训练我在 keras 中基于时间序列数据构建的循环神经网络,以预测未来 10 天的销售数量。为此,我将我的数据集创建为 -
var(t) -> var(t+1)
var(t+1) -> var(t+2)
var(t+2) -> var(t+3)
var(t+3) -> var(t+4) and so on
我对这些数据进行了 Min-Max 缩放,RNN 代码如下 -
model = Sequential()
model.add(LSTM(20, input_shape=(1, look_back),activation='tanh',bias_initializer='ones'))
model.add(Dense(1, activation='linear',bias_initializer='ones'))
opt=adam(lr=0.1)
model.compile(loss='mean_squared_error',optimizer=opt)
model.fit(xtrain, ytrain, epochs=100, batch_size=1, verbose=2)
但是我得到的情节是当我对 xtrain 进行预测时(绿色 = ytrain,蓝色 = ypred) -
rnn 根本没有学到任何东西。它为每个数据集产生相同的结果。我尝试添加隐藏层、增加神经元数量、更改参数(学习率、动量)、优化器(sgd、adam、adagrad、rmsprop)、lstm 激活 fxn(tanh、softsign)。在图表中的某些情况下,我几乎没有波动。但输出大多是恒定的。另外,我只有 200 个数据集。
有人可以指导我在这里做错了什么。我还能尝试什么。小型数据根本无法使用 RNN 吗?如果是这样,有没有其他方法可以解决这个问题(ARIMA 模型除外)?
编辑 - 将批量大小增加到 100 和 epochs 到 1000。收到了一些更好的结果。另外,我的意思是标准化 [(x-mean)/std_dev] 而不是 MinMax 缩放。