Keras发散中的复制卷积双向LSTM实现

时间:2019-05-07 10:51:31

标签: python machine-learning keras lstm

这是我要复制的模型(链接的文章中有更多信息):

  

在我们的模型中,我们在LSTM模型和第一个完全连接层之间采用了一个丢失层,在第一个完全连接层和第二个完全连接层之间采用了另一个丢失层。它们的掩盖概率都设置为0.5。

     

...

     

对于我们提出的CBLSTM,首先设计了一层CNN,其过滤器数量,过滤器大小和合并大小分别设置为150、10和5。因此,原始感觉序列的形状从100 x 12更改为CNN后为19 x 150。然后,在CNN的顶部构建两层双向LSTM。   前后LSTM与[150,200]共享相同的层大小。因此,LSTM模块的输出是由向前和向后LSTM学习的表示的级联向量,其维数为400。然后,在将表示馈入线性回归层之前,将两个大小为[ 500,600]。我们提出的CBLSTM中的非线性激活函数都设置为ReLu。

资料来源:Zhao,R.,Yan,R.,Wang,J.,&Mao,K.(2017)。通过卷积双向LSTM网络学习监视机器的运行状况。传感器,17(2),273。link to paper

输入是630个样本x 100个时间步x 12个特征。

我的模型目前的外观:

model = Sequential()
model.add(Conv1D(filters=150, kernel_size=10, activation='relu', input_shape=(100,12)))
model.add(MaxPooling1D(pool_size=5, strides=None, padding='valid'))
model.add(Bidirectional(LSTM(150, return_sequences=True), merge_mode='concat'))
model.add(Bidirectional(LSTM(200, return_sequences=False), merge_mode='concat'))
model.add(Dropout(0.5))
model.add(Dense(500, activation='relu'))
model.add(Dropout(0.5))
model.add(Dense(600, activation='relu'))
model.add(Dense(1))
model.compile(loss='mean_squared_error', optimizer='rmsprop', metrics=['mae'])

虽然训练损失在每个时期稳步下降,但验证集却并没有迅速分散。这表明我的模型中有一个错误,但我尚未发现。关于什么地方有什么想法吗?

旁注:我使用的输入数据与作者相同。

0 个答案:

没有答案