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测试集:

评价指标
MSE191.78433227539062
MAE10.294214248657227
RMSE13.84862232208252
Scoring_2008301.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. 如何正确使用机器学习中的训练集、验证集和测试集? ↩︎

### TextMeshPro 中文字体包下载与使用方法 TextMeshPro 是 Unity 引擎中的高级文本渲染工具,提供了更高质量的文本显示效果以及丰富的功能特性。然而,默认情况下它并不支持中文字符集,因此需要手动配置中文字体文件并导入到项目中。 #### 字体包获取方式 可以从多个公开资源处获得适配于 TextMeshPro 的中文字体包: 1. **官方文档推荐** 官方建议开发者自行生成字体数据以满足特定需求。可以参考 Unity 提供的相关教程完成自定义字体设置[^1]。 2. **第三方开源库** - GitCode 平台上的 `Open-source-toolkit` 组织维护了一个名为 `TextMeshPro.zip` 的压缩包,其中包含了经过优化处理后的中英混合字体集合[^3]。 - 另外还有专门针对繁简体汉字设计的大规模字形表(共计约两万九千余项),能够覆盖绝大多数日常表达所需范围[^5]。 #### 导入流程说明 以下是具体操作指南: ##### 准备阶段 - 下载目标字体文件至本地存储位置; - 启动最新版本号以上的Unity编辑器实例; ##### 实施步骤 1. 创建新的材质对象或者选取已有实例作为载体容器; 2. 将先前准备好的ttf格式源码拖拽放置进Assets目录下对应分类夹内; 3. 找到该素材关联面板里的Font Asset选项卡区域; 4. 点击Generate按钮启动自动化构建进程直至结束提示框弹出为止; 5. 调整参数设定比如大小比例系数之类的细节属性直到满意程度即可应用测试成果了! ```python // 示例代码片段展示如何动态加载指定路径下的TMPro Font Resource using TMPro; public class Example : MonoBehaviour { void Start() { string fontPath = "Fonts/myCustomChineseFont"; TMP_FontAsset customFont = Resources.Load<TMP_FontAsset>(fontPath); if(customFont != null){ GetComponent<TextMeshProUGUI>().font = customFont; }else{ Debug.LogError("Failed to load the specified font resource!"); } } } ``` 以上便是关于怎样正确安装部署一套兼容性强且表现优异的TextMesh Pro专用型中国语言风格主题方案全过程概述描述啦~
评论 89
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

风筝不是风

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值