我的问题是预测时间序列数据的错误概率。 在数据中,我们有(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)
问题是:样本中的第一个数据点总是过度预测。是否有更好的问题实施?
答案 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_crossentropy
与Dense(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)))