RUL论文复现:深度卷积神经网络在预测剩余寿命估计中的应用
Remaining useful life estimation in prognostics using deep convolutionneural networks RUL预测文献文献中的DCNN模型代码供参考的模型代码训练过程代码损失函数可视化FD001测试集整体RUL预测可视化评价指标neural networks )RUL预测文献最近有道友问了一下关于《Remaining useful
Remaining useful life estimation in prognostics using deep convolution neural networks
neural networks )
RUL预测文献
最近有道友问了一下关于《Remaining useful life estimation in prognostics using deep convolution neural networks》1。论文复现的问题。因此,这里简单码了一点代码。但是和论文中的模型不完全一样。论文中用的应该是2D卷积,这里直接采用1D卷积替代看看能否达到类似的效果。
文献中的DCNN模型
5层卷积+1个Flatten层+Dropout+Full-Connected层+输出层:
代码
供参考的模型代码
inputt=Input(shape=(x_train.shape[1],x_train.shape[2]))
x = tf.keras.layers.Conv1D(filters=10,kernel_size=10,activation='tanh',padding='same',
kernel_initializer='glorot_uniform')(inputt)
x = tf.keras.layers.Conv1D(filters=10,kernel_size=10,activation='tanh',padding='same',
kernel_initializer='glorot_uniform')(x)
x = tf.keras.layers.Conv1D(filters=10,kernel_size=10,activation='tanh',padding='same',
kernel_initializer='glorot_uniform')(x)
x = tf.keras.layers.Conv1D(filters=10,kernel_size=10,activation='tanh',padding='same',
kernel_initializer='glorot_uniform')(x)
x = tf.keras.layers.Conv1D(filters=10,kernel_size=3,activation='tanh',padding='same',
kernel_initializer='glorot_uniform')(x)
x = tf.keras.layers.Flatten()(x)
x = tf.keras.layers.Dropout(0.5)(x)
x = tf.keras.layers.Dense(100,activation='tanh')(x)
x = tf.keras.layers.Dense(1,activation='relu')(x)
DCNN_model=Model(inputs=inputt,outputs=x)
#查看网络结构
DCNN_model.summary()
#编译模型 RMSprop,Adam,Adadelta,Nadam,Adamax,Adagrad
"""分段学习率"""
def scheduler(epoch):
if epoch > 200:
return 0.0001
else:
return 0.001
"""打印学习率,方便查看"""
def get_lr_metric(optimizer):
def lr(y_true, y_pred):
return optimizer.lr#无衰减策略的学习率
return lr
optimizer_diy =tf.keras.optimizers.Adam(learning_rate=0.001)
lr_metric = get_lr_metric(optimizer_diy)
DCNN_model.compile(optimizer=optimizer_diy,loss='mse',metrics=['mse','mae',RMSE,Scoring_2008,lr_metric])
完整代码
最近还是有小伙伴反映代码运行有点小问题哈,可能是keras和Tensorflow的代码混用。现在修改了一个TF2.1版本的代码,已经运行没有任何问提。https://www.aliyundrive.com/s/zWwvUjn3qNf
此外,PyTorch版本的代码做CMAPSSRUL预测,今天我也写了一份,模型可以自行修改为RNN或者一维CNN。Pytorch版本代码的特点:①包含RNN和CNN的输入类型,随意切换。②评价指标加入训练过程。③自定义学习率计划。④训练过程的早期停止。⑤ 验证测试、所有结果保存⑥还有模型的查看,参数打印等。
训练过程代码
由于论文中并没有提及验证集的划分,可能是没有使用。也有可能采用了比较有争议的做法:将测试集作为验证集,每一个epoch就预测一次。因此,我也把测试集直接放在模型的训练过程中,最后只取最好的epoch。
关于模型的训练过程中,是否需要验证集(valid data)?测试集能不能作为验证集?以及这样做带来的额问题,我推荐知乎的南开博士大佬发的一篇博客https://zhuanlan.zhihu.com/p/719612362
Batch_size=512
save_dir="../DCNN_复现/FD001_30time/002/"
if not os.path.exists(save_dir):
os.makedirs(save_dir)
History = DCNN_model.fit(x_train, y_train, epochs=250, batch_size=Batch_size,validation_data=(x_test,y_test),
verbose=2,
callbacks =[keras.callbacks.EarlyStopping(monitor ='val_loss', min_delta=0,patience=125, verbose=0, mode='min'),
keras.callbacks.ModelCheckpoint(os.path.join(save_dir, 'model_Weights_best.h5'),
monitor='val_loss',save_best_only=True,
save_weights_only=True, mode='min', verbose=0),
keras.callbacks.LearningRateScheduler(scheduler)])
损失函数可视化
FD001测试集整体RUL预测可视化
评价指标
FD001测试集:
评价指标 | 值 |
---|---|
MSE | 191.78433227539062 |
MAE | 10.294214248657227 |
RMSE | 13.84862232208252 |
Scoring_2008 | 301.401123046875 |
跑了10次,中间有5次梯度消失。达不到论文的效果,后面试试Conv2D再看看。 |
Li X, Ding Q, Sun J Q. Remaining useful life estimation in prognostics using deep convolution neural networks[J]. Reliability Engineering & System Safety, 2018, 172: 1-11. ↩︎
更多推荐
所有评论(0)