預測性維護:使用卷積神經網絡(CNN)檢測傳感器故障

人工智能 機器學習 CNN PlayStation 不靠譜的貓 2019-04-20
預測性維護:使用卷積神經網絡(CNN)檢測傳感器故障

在機器學習中,隨著時間的推移,預測維修的話題變得越來越流行。

在本文中,我們將看一個分類問題。我們將使用Keras創建一個卷積神經網絡(CNN)模型,並嘗試對結果進行直觀的解釋。

數據集

我決定從evergreen UCI repository(液壓系統的狀態監測)中獲取機器學習數據集(https://archive.ics.uci.edu/ml/datasets/Condition+monitoring+of+hydraulic+systems#)。

該試驗檯由一次工作迴路和二級冷卻過濾迴路組成,通過油箱連接。系統循環重複恆定負載循環(持續時間60秒)並測量過程值,例如壓力,體積流量和溫度,同時定量地改變四個液壓元件(冷卻器、閥門、泵和蓄能器)的狀態。

我們可以想象有一個液壓管道系統,該系統週期性地接收到由於管道內某種液體的轉變而產生的脈衝。此現象持續60秒,採用不同Hz頻率的傳感器(傳感器物理量單位採樣率,PS1 Pressure bar, PS2 Pressure bar, PS3 Pressure bar, PS4 Pressure bar, PS5 Pressure bar, PS6 Pressure bar, EPS1電機功率, FS1體積流量, FS2體積流量, TS1溫度, TS2溫度, TS3溫度, TS4溫度, VS1振動, VS1振動、CE冷卻效率、CP冷卻功率、SE效率係數)進行測量。

我們的目的是預測組成管道的四個液壓元件的狀況。這些目標條件值以整數值的形式註釋(易於編碼),並告訴我們每個週期特定組件是否接近失敗。

讀取數據

每個傳感器測量的值在特定的txt文件中可用,其中每一行以時間序列的形式佔用一個週期。

我決定考慮來自溫度傳感器(TS1、TS2、TS3、TS4)的數據,該傳感器的測量頻率為1 Hz(每一個cicle進行60次觀察)。

label = pd.read_csv('profile.txt', sep='\t', header=None)
data = ['TS1.txt','TS2.txt','TS3.txt','TS4.txt']
df = pd.DataFrame()
#read and concat data
for txt in data:
read_df = pd.read_csv(txt, sep='\t', header=None)
df = df.append(read_df)
#scale data
def scale(df):
return (df - df.mean(axis=0))/df.std(axis=0)
df = df.apply(scale)
預測性維護:使用卷積神經網絡(CNN)檢測傳感器故障

對於第一個週期,我們從溫度傳感器得到這些時間序列:

預測性維護:使用卷積神經網絡(CNN)檢測傳感器故障

Temperature Series for cicle1 from TS1 TS2 TS3 TS4

機器學習模型

為了捕捉有趣的特徵和不明顯的相關性,我們決定採用一維卷積神經網絡(CNN)。這種機器學習模型非常適合對傳感器的時間序列進行分析,並強制在短的固定長度段中重塑數據。

我選擇了Keras網站上描述的卷積神經網絡(CNN),並更新了參數。該機器學習模型的建立是為了對製冷元件的狀態進行分類,僅對給出溫度時間序列的數組形式(t_period x n_sensor for each single cycle)作為輸入。

n_sensors, t_periods = 4, 60
model = Sequential()
model.add(Conv1D(100, 6, activation='relu', input_shape=(t_periods, n_sensors)))
model.add(Conv1D(100, 6, activation='relu'))
model.add(MaxPooling1D(3))
model.add(Conv1D(160, 6, activation='relu'))
model.add(Conv1D(160, 6, activation='relu'))
model.add(GlobalAveragePooling1D())
model.add(Dropout(0.5))
model.add(Dense(3, activation='softmax'))
model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy'])
BATCH_SIZE, EPOCHS = 16, 10
history = model.fit(X_train, y_train, batch_size=BATCH_SIZE,
epochs=EPOCHS, validation_split=0.2, verbose=1)
預測性維護:使用卷積神經網絡(CNN)檢測傳感器故障

在這種情況下只有10個epochs,我們能夠取得驚人的成果!

預測性維護:使用卷積神經網絡(CNN)檢測傳感器故障

對測試數據進行預測,機器學習模型達到0.9909的準確度

預測性維護:使用卷積神經網絡(CNN)檢測傳感器故障

因為通過這種方式,我們能夠檢測並防止系統中可能出現的故障。

可視化結果

如果我們想要對系統狀態有一個總體的瞭解,那麼查看圖形表示可能會很有用。為了達到這一目標,我們重新利用我們在上面構建的卷積神經網絡(CNN)來製作一個解碼器,並從每個週期的時間序列中提取特徵。使用keras,這可以在一行Python代碼中實現:

emb_model = Model(inputs=model.input, outputs=model.get_layer('global_average_pooling1d_1').output)

新模型是一個解碼器,它接收與分類任務中使用的NN格式相同的輸入數據(t_period x n_sensor for each single cycle),並以嵌入形式返回“預測”,嵌入形式來自具有相對維數的GlobalAveragePooling1D層(每一個循環有160個嵌入變量)。

使用我們的編碼器在測試數據上計算預測,採用技術來減小尺寸(如PCA或T-SNE)並繪製結果,我們可以看到:

tsne = TSNE(n_components=2, random_state=42, n_iter=300, perplexity=5)
T = tsne.fit_transform(test_cycle_emb)
fig, ax = plt.subplots(figsize=(16,9))
colors = {0:'red', 1:'blue', 2:'yellow'}
ax.scatter(T.T[0], T.T[1], c=[colors[i] for i in y_test])
plt.show()
預測性維護:使用卷積神經網絡(CNN)檢測傳感器故障

預測性維護:使用卷積神經網絡(CNN)檢測傳感器故障

TSNE用於測試數據的循環嵌入

每個點都表示測試集中的一個循環,相對顏色是Cooler條件的目標類。可以看出如何很好地定義冷卻器組件的目標值之間的區別。這種方法是我們模型性能的關鍵指標。

最後

在這篇文章中,我們嘗試以CNN的時間序列分類任務的形式解決預測性維護的問題我們試圖給出結果的直觀表示

相關推薦

推薦中...