Keras有状态的LSTM - 奇怪的val损失

时间:2018-02-14 01:02:05

标签: machine-learning deep-learning keras lstm

我试图做一步前进的人为设定的股票市场预测,我不确定我是否正在做所有事情,因为我的验证损失没有下降,我的图表向我看。< / p>

没有辍学,我得到以下内容 - 它看起来像过度拟合的常见情况?:here

然而,我认为预测在这种情况下基本上反映了训练数据,因为它已经学习了它的模式,但是在绘制y_train与预测时,我得到了这个图: here

奇怪的是,当绘制y_test与预测时,它看起来更准确: here

如果使用如此低的训练MSE,y_train怎么可能这么远,而且对于高MSE,y_test会更准确?

当添加辍学时,模型根本无法学习或只是在训练集上学得慢得多(只有10个时期来减少训练时间,但是模式保持val损失不减少)。 here

有关模型的一些信息。 我的数据形状如下:

x_train size is: (172544, 20, 197)
x_test size is: (83968, 20, 197)
y_train size is: (172544, 1)
y_test size is: (83968, 1)

X在时间步长[0,1,2,... 19]处被设置为197个特征,并且在时间步长[20]处具有相应的Y标签。重复下一个序列[1,2,3 ... 20]和Y标签[21]等等。

将所有数据归一化为0,std_dev 1(在训练集上)然后应用于测试集。

模型代码:

batch_size = 512
DROPOUT = 0.0
timesteps = x_train.shape[1]
data_dim = x_train.shape[2]

model = Sequential()
model.add(LSTM(512, stateful=True, return_sequences=True, implementation=2, 
               dropout=DROPOUT,
               batch_input_shape=(batch_size, timesteps, data_dim)))
model.add(LSTM(256, stateful=True, return_sequences=True, implementation=2, 
               dropout=DROPOUT))
model.add(LSTM(256, stateful=True, return_sequences=False, implementation=2, 
               dropout=DROPOUT))
model.add(Dense(1, activation='linear')) 

nadam = Nadam()
model.compile(loss='mse',
              optimizer=nadam,
              metrics=['mse','mae','mape'])

history = model.fit(x_train, y_train,validation_data=(x_test, y_test),
          epochs=100,batch_size=batch_size, shuffle=False, verbose=1, callbacks=[reduce_lr])

编辑:即使使用两个样本,也会发生相同的情况

x_train size is: (2, 2, 197)
x_test size is: (2, 2, 197)
y_train size is: (2, 1)
y_test size is: (2, 1)

y_train vs predictions

0 个答案:

没有答案