对不起,我是RNN的新手。我在TimeDistributed层上阅读了this post。
我已将我的数据重新整理为Keras需要[samples, time_steps, features]
:[140*50*19]
,这意味着我有140个数据点,每个数据点有50个时间步长,以及19个功能。我的输出形状为[140*50*1]
。我更关心最后一个数据点的准确性。这是一个回归问题。
我目前的代码是:
x = Input((None, X_train.shape[-1]) , name='input')
lstm_kwargs = { 'dropout_W': 0.25, 'return_sequences': True, 'consume_less': 'gpu'}
lstm1 = LSTM(64, name='lstm1', **lstm_kwargs)(x)
output = Dense(1, activation='relu', name='output')(lstm1)
model = Model(input=x, output=output)
sgd = SGD(lr=0.00006, momentum=0.8, decay=0, nesterov=False)
optimizer = sgd
model.compile(optimizer=optimizer, loss='mean_squared_error')
我的问题是:
return_sequences=True
?如果我只需要最后一次步骤的预测,它将是多对一的。所以我需要将输出设为[140*1*1]
和return_sequences=False
? 我曾尝试将TimeDistributed图层用作
output = TimeDistributed(Dense(1, activation='relu'), name='output')(lstm1)
性能似乎比没有使用TimeDistributed层更差。为什么会这样?
optimizer=RMSprop(lr=0.001)
。我认为RMSprop
应该稳定NN。但是我无法使用RMSprop
获得良好的结果。lr
选择好的SGD
和动力?我一直在手动测试不同的组合。在keras中有交叉验证方法吗? 答案 0 :(得分:2)
所以:
return_sequences=False
使您的网络只输出序列预测的最后一个元素。RMSProp
作为RNN的首选是一条经验法则 - 不是一般的证明法。此外 - 强烈建议不要改变它的参数。所以这可能会导致问题。另一件事是LSTM
需要大量时间来稳定。也许你需要留下更多的时代。最后一件事 - 也许你的数据可能有利于另一个激活功能。 keras.sklearnWrapper
。