RUL论文复现:深度卷积神经网络在预测学剩余寿命估计中的应用

Remaining useful life estimation in prognostics using deep convolution neural networks

  • RUL预测文献
  • 文献中的DCNN模型
  • 代码
  • 供参考的模型代码
  • 完整代码
  • 训练过程代码
  • 损失函数可视化
  • FD001测试集整体RUL预测可视化
  • 评价指标
  • neural networks )

    RUL预测文献

    最近有道友问了一下关于《Remaining useful life estimation in prognostics using deep convolution neural networks1。论文复现的问题。因此,这里简单码了一点代码。但是和论文中的模型不完全一样。论文中用的应该是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再看看。

    1. 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. ↩︎

    2. 如何正确使用机器学习中的训练集、验证集和测试集? ↩︎

    来源:风筝不是风

    物联沃分享整理
    物联沃-IOTWORD物联网 » RUL论文复现:深度卷积神经网络在预测学剩余寿命估计中的应用

    发表评论