neural networks )
最近有道友问了一下关于《
Remaining useful life estimation in prognostics using deep convolution neural networks
》
1
。论文复现的问题。因此,这里简单码了一点代码。但是和论文中的模型不完全一样。论文中用的应该是2D卷积,这里直接采用1D卷积替代看看能否达到类似的效果。
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()
"""分段学习率"""
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/71961236
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测试集:
评价指标 | 值 |
---|
MSE | 191.78433227539062 |
MAE | 10.294214248657227 |
RMSE | 13.84862232208252 |
Scoring_2008 | 301.401123046875 |
跑了10次,中间有5次梯度消失。达不到论文的效果,后面试试Conv2D再看看。 | |
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 convolut
剩余使用寿命(RUL)预测在预测和健康管理(PHM)中起着至关重要的作用,以提高可靠性并降低众多机械系统的周期成本。 深度学习(DL)模型,尤其是深度卷积神经网络(DCNN),在RUL预测中正变得越来越流行,从而在最近的研究中取得了最新的成果。 大多数DL模型仅提供目标RUL的点估计,但是非常需要为任何RUL估计具有关联的置信区间。 为了改进现有方法,我们构建了一个概率RUL预测框架,以基于参数和非参数方法来估计目标输出的概率密度。 模型输出是对目标RUL的概率密度的估计,而不仅仅是单点估计。 所提出的方法的主要优点是该方法自然可以提供目标预测的置信区间(不确定性)。 我们通过一个简单的DCNN模型,在公开可用的涡轮发动机退化模拟数据集上验证了我们构建的框架的有效性。 源代码将在https://github.com/ZhaoZhibin/Probabilistic_RUL_Prediction中发布。
基于ANN人工神经网络的锂电池寿命预测(Remaining Useful Life,RUL)(Python完整源码和数据)
基于ANN人工神经网络的锂电池寿命预测(Remaining Useful Life,RUL)(Python完整源码和数据)
基于ANN人工神经网络的锂电池寿命预测(Remaining Useful Life,RUL)(Python完整源码和数据)
基于 Transformer 的锂电池寿命预测(Remaining Useful Life,RUL)(Python完整源码和数据)
Packages
pytorch 1.8.0
pandas 0.24.2
基于 Pytorch 的 Transformer 锂电池寿命预测(Remaining Useful Life,RUL)
机器、设备、设备或机械元件的剩余使用寿命(RUL)的确定,对于行业的未来和维护过程的优化都是一个至关重要的问题。对机器的持续监控以及对RUL的良好预测,使得维护成本最小化,并降低了发生灾难性故障的风险。另一方面,也知道从监测中获得的数据是多变的,具有序列性,与RUL并不总是具有严格的关系,因此它们的估计是一个困难的问题。目前在这类问题中,使用了不同类型的神经网络。特别是当需要用序列数据建模问题时,循环神经网络(RNN)因其在时间序列中自主识别模式的能力而受到青睐,最近,也有替代方法将卷积作为这些网络的每个细胞的一种操作。因此,这些网络在某些情况下优于它们的卷积和递归对,因为它们能够处理图像序列,并且在本工作的特殊情况下,可以处理经过卷积软化和递归处理的监测数据的时间序列。本工作的总体目标是基于卷积递归神经网络(ConvRNN),从C-MAPSS数据集的时间序列中获得最佳的涡扇风机RUL。本文还研究了如何修改数据库以提高卷积神经网络的精度,以及如何应用卷积作为主要操作在一个时间序列的参数显示涡扇风机的行为。为此,编写了卷积LSTM、卷积LSTM编解码器、卷积JANET和卷积JANET编解
《Remaining useful life estimation in prognostics using deep convolution neural networks》;期刊:Reliability Engineering and System Safety;IF: 4.788 Q1;作者:Xiang Li
本文提出了一种基于深度卷积神经网络(DCNN)的新的数据驱动预测方法。为了使DCNN能够更好地提取特征,采用时间窗口方法进行样品制备。标准化的原始数据直接用作该网络的输入,不需要
基于Deep AR模型的轴承RUL预测Deep AR模型1.直接将特征输入到Deep AR模型进行RUL预测2.将Deep AR应用于HI的后处理总结
Deep AR模型
最早接触DeepAR模型是2020年在简书看到的一篇大佬的博客:https://www.jianshu.com/p/8a900b9ad3d3
这位大佬非常详细的讲解了Deep AR的代码实战操作。受大佬的启发,并结合在github上面的搜集的资料,最终本人完成了对Deep AR的探究,并且成功应用于PHM 2012轴承的RUL( ps:不
预测机械
剩余使用
寿命的
深度可分离
卷积神经网络
深度学习因其强大的表示学习能力在数据驱动的器械设备
剩余使用
寿命(
RUL)
预测中越来越受到重视。借助
深度学习技术,可以更充分地了解机器退化情况,近年来的研究取得了卓有成效的机械设备
剩余使用
寿命的
预测结果。然而,这些基于
深度学习的
预测方法有以下缺点:
预测的准确度很大程度上取决于人工特征设计。
在表示学习
中,未明确考虑不同传感器之间数据的相关性。
这是
寿命预测案例
中的第三个也是最后一个。这是基于失效统计数据的一种模型,即当我们知道某一种产品的整体
寿命分布时,可以
估计到该产品
剩余寿命的分布情况。这种
预测思想是非常直观且简单的,所以该案例也非常简短[1]:
1.加载数据
load('reliabilityData.mat')
该数据是表示电池放电时间的持续时间的数组。
2.创建模型
创建可靠性生存模型,制定
寿命变量和
寿命单位:
这里写自定义目录标题本博客的码字背景一.基础知识准备阶段二.深度学习的理论学习三、深度学习框架Tensorflow&PytorchRUL预测------涡扇发动机轴承寿命预测直接上图XJTU 西安交大轴承全寿命数据集
本博客的码字背景
最近马上就研三了,回顾一路从小白开始入门深度学习做机械核心零部件寿命预测的历程吧。
1.本科期间未接触过python,深度学习相关的内容。
2.研究生在寿命预测方向入门画的时间比较长,走过了许多弯路。
毕竟万事开头难,作为课题组第一位做该方向的研究生。得到的理论指导与
在上一篇文章中我们讲到了三种机电产品算命方法:相似模型法、退化模型法和生存模型法。
这一篇我们将使用相似模型法构建完整的剩余使用寿命(RUL)估计工作流程。该案例来自MATLAB的Similarity-Based Remaining Useful Life Estimation[1],在这里做一下流程梳理,对难点加一些讲解,并对代码添加了注释并列出了关键代码。
1.案例描述
数据集使用了PH...
import matplotlib.pyplot as plt
from keras.models import Sequential
from keras.layers import Dense, Conv1D, Flatten
# 读取数据
data = np.loadtxt('data.txt')
# 数据预处理
X = data[:, :-1].reshape(-1, 1000, 1)
y = data[:, -1]
# 构建模型
model = Sequential()
model.add(Conv1D(filters=32, kernel_size=3, activation='relu', input_shape=(1000, 1)))
model.add(Conv1D(filters=64, kernel_size=3, activation='relu'))
model.add(Flatten())
model.add(Dense(1, activation='linear'))
# 编译模型
model.compile(loss='mse', optimizer='adam')
# 训练模型
model.fit(X, y, epochs=10, batch_size=32)
#
预测RUL
y_pred = model.predict(X)
# 绘制
RUL曲线图
plt.plot(y, label='True
RUL')
plt.plot(y_pred, label='Predicted
RUL')
plt.legend()
plt.show()
这个示例代码使用了Keras库来构建
卷积神经网络模型,读取数据后进行预处理,然后训练模型并
预测RUL,最后绘制
RUL曲线图。当然,这只是一个简单的示例,实际
应用中需要根据具体情况进行调整和优化。