[keras]使用LSTM进行多对多概率预测

时间:2017-10-25 06:23:55

标签: keras lstm rnn

我的问题是预测时间序列数据的错误概率。 在数据中,我们有(n_samples,timesteps,features),其中时间步长是时间序列的最大长度。训练y_train的每个时间点的one_hot标签都是错误。

X_train和y_train用零填充,因此添加了掩蔽层。

为了预测错误概率,我有一个实现如下:

model = Sequential()
model.add(Masking(mask_value = 0, input_shape = (X_train.shape[1], 
X_train.shape[2])))
model.add(Bidirectional(LSTM(para['hiddenStateSize'], 
return_sequences = True)))

model.add(Dropout(0.2))
model.add(TimeDistributed(Dense(2)))
model.add(TimeDistributed(Activation('softmax')))
model.compile(loss = 'binary_crossentropy', optimizer = 'adam')
print(model.summary())

model.fit(X_train, y_train, epochs = epochs, batch_size = batch_size, shuffle = False)

问题是:样本中的第一个数据点总是过度预测。是否有更好的问题实施?

1 个答案:

答案 0 :(得分:0)

对于时间序列预测,我没有用双向lstms进行多少实验,但这里有两件事我会在你的模型中改变:

我要categorical_crossentropy使用Dense(2)softmax

model.add(TimeDistributed(Dense(2)))
model.add(TimeDistributed(Activation('softmax')))
model.compile(loss = 'categorical_crossentropy', optimizer = 'adam')

binary_crossentropyDense(1)sigmoid

model.add(TimeDistributed(Dense(1)))
model.add(TimeDistributed(Activation('sigmoid')))
model.compile(loss = 'binary_crossentropy', optimizer = 'adam')

同时尝试LSTM的dropout(或recurrent_dropout)参数

model.add(Bidirectional(LSTM(64, dropout=0.2, return_sequences = True)))