化VMD與CNN-BILSTM的軸承故障診斷方法與實踐)
1. 項目概述與核心思路軸承故障診斷這事做設(shè)備健康管理的人都不陌生。絕大多數(shù)旋轉(zhuǎn)機械的停機事故根源都能追溯到軸承。但真正動手做診斷時才會發(fā)現(xiàn)現(xiàn)場振動信號遠比課本上講的復(fù)雜背景噪聲大、故障特征微弱、工況變化快單純靠頻譜分析往往看不出來問題。這幾年深度學習的路子流行起來CNN、LSTM這類模型確實能自動提特征可前提是你得喂給它一組像樣的輸入。這就是本項目的切入點先用信號分解算法把原始振動信號里的故障成分剝離出來再用一個優(yōu)化算法把分解參數(shù)、模型超參數(shù)都調(diào)到合適的范圍最后交給CNN和BILSTM組成的網(wǎng)絡(luò)去完成故障分類。整個鏈路從數(shù)據(jù)預(yù)處理到模式識別是全通的。標題里的這套組合本質(zhì)上是在解決一個很實際的痛點單一算法都有明顯短板。VMD分解效果好但模態(tài)數(shù)和懲罰因子這兩個參數(shù)要靠人肉試錯麻雀搜索算法收斂快但前期容易扎堆、后期容易掉進局部最優(yōu)CNN擅長抓局部特征卻照顧不到振動信號在時間維度的前后依賴關(guān)系BILSTM正好補上時序建模這塊但參數(shù)又多又敏感。于是就有了融合魚鷹策略和柯西變異的麻雀算法OCSSA——用它去優(yōu)化VMD的參數(shù)再把分解后的分量整理成適合網(wǎng)絡(luò)訓練的特征輸入同時把CNN-BILSTM的超參數(shù)也一并尋優(yōu)。這套流水線放在公開的標準軸承故障數(shù)據(jù)集上驗證Matlab實現(xiàn)單機就能跑復(fù)現(xiàn)門檻不高。適合誰來參考兩類人。一類是做故障診斷、設(shè)備狀態(tài)監(jiān)測的研究者或工程師想找個能落地的完整框架而不是只看論文里的公式推導。另一類是剛接觸智能診斷的學生需要一個從信號處理到深度學習無縫銜接的示例程序搞清楚每個模塊到底在干什么、參數(shù)怎么聯(lián)動。這篇內(nèi)容不適合那種只想一步到位、跑通就萬事大吉的人因為中間任何一個環(huán)節(jié)沒對齊結(jié)果都可能差出幾個百分點。2. 整體架構(gòu)與控制變量設(shè)計2.1 為什么是“優(yōu)化VMD CNN-BILSTM”而不是別的組合先聊VMD。VMD的全稱是變分模態(tài)分解它和EMD最大的區(qū)別是EMD是遞歸篩選VMD是整體求解約束變分問題能把信號分解成指定數(shù)量的有限帶寬模態(tài)。它的兩個核心參數(shù)——模態(tài)分解數(shù)K和懲罰因子alpha——直接決定分解效果。K取小了多個頻率成分擠在一個模態(tài)里故障特征混在一起K取大了模態(tài)過于破碎分解出虛假分量白噪聲被拆成好幾條。alpha控制帶寬alpha越大模態(tài)帶寬越窄反之越寬。這兩個參數(shù)如果靠人工試一組信號還好辦遇到幾十組不同負載、不同故障類型的樣本試到懷疑人生。再說分類網(wǎng)絡(luò)。純CNN能提取局部特征但振動信號是時間序列故障沖擊在時序上是有先后關(guān)聯(lián)的。BILSTM從兩個方向捕捉時間依賴比單向LSTM的信息利用更充分。把CNN當作特征前置提取器把BILSTM當作時序推理器再用全連接層輸出分類概率這個搭配在軸承故障診斷里已經(jīng)是被反復(fù)驗證有效的組合。那為什么不直接用端到端的深度學習讓網(wǎng)絡(luò)自己從原始波形里學理論上可以但實際工程里有個問題原始信號里大量能量集中在工頻和噪聲上故障特征頻帶的能量占比很低網(wǎng)絡(luò)很容易學偏。先用VMD把信號按頻帶拆開等于先做了一次物理意義上的特征增強把微弱故障成分從強背景里撈出來再交給網(wǎng)絡(luò)去學收斂難度和樣本需求量都會明顯下降。2.2 OCSSA優(yōu)化器在整個流程中的位置這套方法里優(yōu)化器扮演兩個角色。第一個角色是VMD參數(shù)尋優(yōu)用OCSSA搜索K和alpha的最優(yōu)組合適應(yīng)度函數(shù)一般選包絡(luò)熵、排列熵或者兩者的組合。包絡(luò)熵越小說明分解出來的模態(tài)周期性沖擊越明顯、噪聲越少拿它當優(yōu)化目標很直觀。第二個角色是CNN-BILSTM超參數(shù)尋優(yōu)包括卷積核數(shù)量、池化方式、LSTM隱藏單元數(shù)、學習率、正則化系數(shù)等。這里有個容易踩坑的點很多人把VMD參數(shù)優(yōu)化和網(wǎng)絡(luò)超參優(yōu)化混在一起做試圖用一個優(yōu)化器一把梭。實際效果往往不好。因為VMD的適應(yīng)度評價是信號處理層面的一次評價只要幾毫秒到幾十毫秒而網(wǎng)絡(luò)超參的適應(yīng)度評價要完整訓練一個模型動輒幾十秒甚至幾分鐘。把兩類問題放在同一個搜索空間里尺度完全不對等優(yōu)化器很容易被某個維度帶偏。所以項目里比較穩(wěn)妥的做法是分兩個階段先固定網(wǎng)絡(luò)結(jié)構(gòu)優(yōu)化VMD參數(shù)確定好信號分解方案再固定VMD參數(shù)把精力放在網(wǎng)絡(luò)超參尋優(yōu)上。2.3 融合魚鷹策略與柯西變異的改進邏輯麻雀搜索算法SSA是2020年前后提出的一種群智能優(yōu)化算法把種群分為發(fā)現(xiàn)者、加入者和警戒者三種角色。發(fā)現(xiàn)者負責全局探索加入者跟隨發(fā)現(xiàn)者覓食警戒者負責發(fā)現(xiàn)危險并發(fā)出預(yù)警。這個分工機制在不少優(yōu)化問題里表現(xiàn)不錯但有兩個毛病一是在迭代早期容易陷入“過度聚集”所有麻雀迅速朝某個局部最優(yōu)區(qū)域靠攏種群多樣性崩得很快二是后期收斂到局部最優(yōu)時缺乏有效的逃逸機制一旦跳不出來精度就鎖死了。魚鷹優(yōu)化策略借鑒的是魚鷹捕魚時的俯沖行為簡單說就是在迭代中給個體增加一個“大范圍跳躍搜索”的機會類似于在當前位置附近重新做一次更廣的鄰域探索。把這種機制融合進麻雀算法的發(fā)現(xiàn)者更新公式里可以在前期保持更好的種群多樣性減少早熟收斂的概率。柯西變異則是經(jīng)典的擾動手段。柯西分布比高斯分布更“胖尾”也就是說它有更大的概率產(chǎn)生偏離均值較遠的隨機數(shù)。當麻雀個體陷入局部最優(yōu)時用柯西變異去沖擊當前位置相當于給搜索方向加一個“重踢”動作踢得好就能越出局部陷阱。兩者配合下來的實際效果就是在收斂速度和尋優(yōu)精度之間找到一個更好的平衡點這也是為什么標題里稱它為OCSSA。注意改進優(yōu)化算法在學術(shù)研究里很討巧但工程落地上要清醒一點。OCSSA的收益主要體現(xiàn)在VMD參數(shù)尋優(yōu)這類低維問題上維度越高、評價越貴改進帶來的增益越不明顯。放到本項目里它的核心價值是讓整套流程能夠自動跑通而不是換來一個驚艷的精度數(shù)字。3. 數(shù)據(jù)準備與信號預(yù)處理細節(jié)3.1 標準軸承數(shù)據(jù)集的使用口徑項目驗證用的是行業(yè)內(nèi)廣泛采用的標準軸承故障數(shù)據(jù)通常由電機驅(qū)動端和風扇端的加速度傳感器采集覆蓋正常、滾動體故障、內(nèi)圈故障、外圈故障等典型狀態(tài)每種狀態(tài)下又細分不同損傷直徑和不同負載工況。需要說明的是公開數(shù)據(jù)的原始格式是mat文件每個文件對應(yīng)一個采樣工況采樣頻率常見的有12k和48k兩個檔位。使用前要先把文件按故障類型和損傷尺寸分類整理建立標簽。這里有一個經(jīng)常被忽略的細節(jié)不同負載下采集的數(shù)據(jù)信噪比差異很大。如果簡單地把所有負載的數(shù)據(jù)混在一起訓練模型會學到負載信息而非故障信息如果只用單一負載泛化能力又差。合理做法是選擇同一負載下的數(shù)據(jù)進行訓練與測試或者采用跨負載的遷移驗證方案。在實際項目中建議先做一次數(shù)據(jù)可視化把原始波形和頻譜打印出來看一眼確認數(shù)據(jù)本身質(zhì)量再進入后續(xù)流程。3.2 樣本切片、歸一化與訓練集劃分原始振動信號是連續(xù)的長序列不能直接整段丟給網(wǎng)絡(luò)訓練。常見的做法是滑窗切片設(shè)置窗口長度和步長從每段連續(xù)信號中切出若干樣本。窗口長度怎么定要覆蓋至少幾個故障沖擊周期。以常用的軸承數(shù)據(jù)為例轉(zhuǎn)速約1730轉(zhuǎn)/分時滾動體通過頻率在幾十到一百赫茲左右采樣率12k下一個沖擊周期大約對應(yīng)120到300個采樣點窗口長度取1024或2048都比較合理。步長一般取窗口的一半保證相鄰樣本間有一定的重疊提升樣本數(shù)量同時保留時序相關(guān)性。切片之后要做歸一化。振動信號幅值在不同工況下波動很大不歸一化的話網(wǎng)絡(luò)訓練很容易被大數(shù)值樣本主導。常用的方式是Z-score歸一化即減去均值、除以標準差把每個樣本映射到零均值、單位方差的分布上。這里要特別留意歸一化參數(shù)必須在訓練集上計算然后沿用同樣的參數(shù)處理驗證集和測試集。如果對整個數(shù)據(jù)集統(tǒng)一做歸一化會把測試集信息泄露給訓練過程得到的測試指標是虛高的。訓練集和測試集的劃分也不能隨意。因為滑動切片會引入相鄰樣本的高度相似性如果劃分時不做任何處理訓練集和測試集里很可能出現(xiàn)來自同一時間段的樣本模型等于提前見過答案。穩(wěn)妥的做法是先按數(shù)據(jù)文件劃分每個文件里的樣本要么全在訓練集要么全在測試集再按故障類型保持類別比例均衡。項目里常用8:2的比例或者按不同負載做跨工況驗證。4. OCSSA-VMD核心環(huán)節(jié)的實現(xiàn)4.1 適應(yīng)度函數(shù)的選擇邏輯OCSSA在搜索VMD參數(shù)時適應(yīng)度函數(shù)的選擇直接決定了優(yōu)化方向。前面提到包絡(luò)熵這里展開說一下。包絡(luò)熵的計算流程是對某個模態(tài)信號做希爾伯特變換得到解析信號的幅值包絡(luò)把包絡(luò)歸一化后計算信息熵。如果包絡(luò)是平坦的、雜亂無章的熵值就高如果包絡(luò)呈現(xiàn)明顯的沖擊脈沖形態(tài)熵值就低。故障軸承的振動信號經(jīng)過合適的VMD分解后故障相關(guān)的模態(tài)應(yīng)當表現(xiàn)出清晰的沖擊特征所以包絡(luò)熵可以作為衡量分解質(zhì)量的有效指標。實際應(yīng)用中直接對全部模態(tài)的包絡(luò)熵求和作為適應(yīng)度有時會有問題某個模態(tài)包絡(luò)熵很低但其他模態(tài)熵很高總分可能被平均化。作者們常用的改進做法是取所有模態(tài)包絡(luò)熵的最小值或者按能量權(quán)重加權(quán)求和。另一種思路是引入峭度指標沖擊成分越明顯峭度越高可以和包絡(luò)熵做一個復(fù)合適應(yīng)度函數(shù)。這個選擇沒有絕對標準關(guān)鍵是和你要提取的故障特征對齊。如果目標是提取沖擊特征包絡(luò)熵和峭度組合就很合適如果目標是分解后信號的平穩(wěn)性排列熵更合適。實操中建議做一個小腳本把OCSSA每一代的適應(yīng)度變化曲線打印出來。這條曲線如果在前10代就斷崖式下降說明搜索空間定義或者參數(shù)邊界設(shè)置有問題如果一直平坦不下探說明初始種群分布太集中需要調(diào)大種群規(guī)?;虺跏挤秶?。4.2 OCSSA優(yōu)化VMD參數(shù)的具體實施步驟在Matlab里實現(xiàn)時整個過程可以拆成五個步驟。第一步初始化OCSSA參數(shù)。種群規(guī)模N取20到30最大迭代次數(shù)T取30到50問題維度是2維對應(yīng)K和alpha。K的搜索范圍建議取[2, 10]alpha的搜索范圍取[100, 3000]注意這里alpha是連續(xù)變量K是整數(shù)變量在位置更新后要做取整處理。第二步初始化種群。在搜索范圍內(nèi)隨機生成N組(K, alpha)候選解每組候選解都要執(zhí)行一次VMD分解和適應(yīng)度評估記錄全局最優(yōu)位置和適應(yīng)度。這里每執(zhí)行一次VMD都要調(diào)用一次vmd函數(shù)Matlab內(nèi)置函數(shù)在R2019a之后就能直接使用老版本需要自己寫實現(xiàn)。VMD的輸入除了信號和參數(shù)外還有噪聲容差tau和DC分量條件一般不需要優(yōu)化保持默認即可。第三步按照OCSSA的更新機制迭代。這一步是核心差異點。麻雀發(fā)現(xiàn)者的位置更新在標準SSA中是一個指數(shù)衰減的公式OCSSA在保留這一機制的同時對部分個體引入魚鷹策略的鄰域跳躍以當前個體為中心在給定半徑內(nèi)隨機生成新位置如果適應(yīng)度更優(yōu)則替換。同時當某個個體的適應(yīng)度連續(xù)若干代沒有改善時用柯西分布生成一個隨機擾動向量疊加到當前位置上擾動幅度隨迭代次數(shù)遞減。這樣可以保證后期仍有逃脫局部最優(yōu)的能力。第四步收斂判斷。如果達到最大迭代次數(shù)或者全局最優(yōu)適應(yīng)度在連續(xù)多代內(nèi)變化小于設(shè)定閾值就停止搜索。輸出最優(yōu)K和alpha。第五步確定VMD參數(shù)后跑一次最終分解保存各模態(tài)分量同時把分解后的信號和原始信號的頻譜對比圖輸出用于人工核驗分解效果。4.3 VMD分解后特征怎么組織優(yōu)化得到最優(yōu)K和alpha后對每段原始樣本做VMD分解會得到K個IMF分量。這里面臨一個選擇是全部K個分量都送入網(wǎng)絡(luò)還是挑選部分分量如果全部送入輸入通道數(shù)變成K會把噪聲模態(tài)也一起喂給模型增加干擾。更常見的方案是按峭度和相關(guān)系數(shù)挑選出最能代表故障特征的兩個或三個分量。相關(guān)系數(shù)是模態(tài)與原始信號的線性相關(guān)度峭度衡量沖擊性。比如選峭度最大的前2個分量加上能量占比最高的1個分量組合成一個多通道輸入。多通道輸入怎么組織因為CNN的輸入要求是三維張量形狀是(樣本數(shù), 特征長度, 通道數(shù))。把選出的分量按時間對齊每個分量的長度等于樣本長度通道維度放不同的分量。這樣CNN的卷積核可以同時跨通道提取特征相當于把不同頻帶的信息做了一次融合。這個做法的好處是保留了不同模態(tài)間的互補信息比單純拼接成一維長向量更利于CNN捕捉頻帶間的相關(guān)模式。5. CNN-BILSTM模型結(jié)構(gòu)與Matlab實現(xiàn)要點5.1 網(wǎng)絡(luò)各層的作用與參數(shù)選擇整個網(wǎng)絡(luò)按照“卷積特征提取—雙向時序建模—全連接分類”的路線組織。第一塊是CNN部分。建議先用兩層卷積第一層卷積核尺寸大一點比如32或64用于捕捉振動波形中的局部沖擊形態(tài)第二層卷積核尺寸小一點比如3或5用于在第一層特征基礎(chǔ)上做細粒度的模式提取。每層卷積后接BatchNorm和ReLU再接一個最大池化。池化窗口大小取2或4步子別邁太大否則會丟失時序分辨率。卷積核數(shù)量不需要貪多64到128就夠用了數(shù)據(jù)量不大時卷積核過多反而容易過擬合。第二塊是BILSTM部分。把CNN輸出的特征圖展平成一維特征序列然后送入雙向LSTM層。BILSTM的核心思想是每個時間步同時從前向和后向兩個方向讀取信息輸出的隱狀態(tài)是兩個方向的拼接。隱藏單元數(shù)一般在32到128之間太小記不住長距離依賴太大訓練成本高且容易過擬合。bidirectionalLSTM層在Matlab里直接用bidirectionalLSTM(numHiddenUnits)創(chuàng)建OutputMode選sequence這樣每個時間步都輸出后續(xù)可以再接一層LSTM或直接做全局池化。第三塊是全連接分類部分。BILSTM的輸出經(jīng)過一個全連接層映射到類別數(shù)Softmax層做概率輸出。分類層用classificationLayer。為防止過擬合在全連接層前加Dropout層丟棄率取0.3到0.5。LSTM層內(nèi)部其實也可以用dropout參數(shù)控制但Matlab的bidirectionalLSTM不支持顯式指定dropout需要手動在層間加dropoutLayer。5.2 訓練選項與優(yōu)化器設(shè)置訓練階段有幾個參數(shù)需要特別重視。最大輪數(shù)epochs一般取30到60。數(shù)據(jù)量不大時輪數(shù)太多容易過擬合太少則收斂不徹底。初始學習率取0.001到0.01優(yōu)化器用Adam。MiniBatchSize取32或64太大內(nèi)存壓力大且收斂方向不穩(wěn)定太小則梯度噪聲大。這里有個工程細節(jié)驗證集在訓練過程中的損失曲線是判斷是否過擬合的第一手證據(jù)。訓練損失持續(xù)下降、驗證損失卻掉頭上升說明模型開始背訓練集了。此時應(yīng)該提前停止或者調(diào)低學習率。在Matlab里可以通過trainingOptions設(shè)置ValidationPatience參數(shù)連續(xù)若干個輪次驗證損失不下降就自動停止訓練。剛跑實驗時別急著上大網(wǎng)絡(luò)。先用一個小規(guī)模的快速實驗比如把CNN層數(shù)減半、把隱藏單元降到16跑通整個數(shù)據(jù)流確認維度匹配、類別標簽沒有問題再逐步放大模型。這一步能省下大量調(diào)試時間。5.3 特征可視化與中間輸出檢查代碼寫完后先別急著看最終準確率。把模型在中間層的輸出可視化出來往往能發(fā)現(xiàn)隱藏問題。比如把第一層卷積輸出的特征圖畫出來如果所有樣本的特征圖長得幾乎一樣說明卷積核沒有有效激活通常是學習率太大或者輸入歸一化出了問題。再把BILSTM某個時間步的隱狀態(tài)畫出來看不同故障類別是否有可分性。這些檢查看起來麻煩但實際價值很大比盲目調(diào)參高效得多。6. 實驗驗證與結(jié)果分析方向6.1 實驗方案設(shè)計項目采用公開的標準軸承故障數(shù)據(jù)集做驗證。數(shù)據(jù)包含正常、內(nèi)圈故障、外圈故障、滾動體故障四種狀態(tài)每種狀態(tài)再按損傷程度細分類別總數(shù)一般為10類左右。每個類別取足夠樣本量例如每類樣本數(shù)在200到500之間保證訓練與測試的類別均衡。整體流程按前面章節(jié)描述的“OCSSA優(yōu)化VMD—特征構(gòu)建—CNN-BILSTM訓練”執(zhí)行。實驗設(shè)計上建議做三組對比第一組是標準SSA優(yōu)化VMD CNN-BILSTM用來驗證魚鷹和柯西變異帶來的改進效果第二組是固定VMD參數(shù) CNN-BILSTM用來驗證參數(shù)優(yōu)化的價值第三組是完整OCSSA-VMD-CNN-BILSTM作為最終方案。三組實驗保持網(wǎng)絡(luò)結(jié)構(gòu)和訓練選項完全一致只改變前置環(huán)節(jié)這樣對比結(jié)果才干凈。除了分類準確率還要關(guān)注幾個輔助指標精確率、召回率、F1值以及混淆矩陣。準確率在類別均衡時還能說明問題但如果是故障程度細分的小類別分類樣本不均衡幾乎是必然的只看準確率容易被高樣本量的類別帶跑。F1值和混淆矩陣能暴露模型到底在哪些容易混淆的對子上犯錯——通常是輕度故障和正常狀態(tài)之間或者滾動體故障和內(nèi)外圈故障之間。6.2 預(yù)期結(jié)果與敏感性分析完整的OCSSA-VMD-CNN-BILSTM方案在標準軸承數(shù)據(jù)上分類準確率一般能夠達到99%以上。這個數(shù)字看著漂亮但要提醒一句這類公開數(shù)據(jù)集的實驗環(huán)境相對干凈樣本差異主要來自故障類型本身所以深度學習模型很容易學到強判別特征。真正到了現(xiàn)場數(shù)據(jù)信噪比低、工況復(fù)雜、故障類型混合準確率通常會明顯下滑。項目里能做到99%以上說明框架本身沒有問題但不要把這個數(shù)字當作工業(yè)落地的直接預(yù)期。敏感性分析是一個容易被忽視的加分項。做法是固定其他條件單獨改變某個參數(shù)觀察結(jié)果的變化幅度。比如把VMD的K參數(shù)在最優(yōu)值附近上下各取幾個值把CNN卷積核數(shù)量做增減記錄測試準確率。如果結(jié)果波動很小說明方案魯棒如果準確率劇烈抖動說明當前配置處于一個很陡峭的參數(shù)區(qū)域需要引起注意。這部分分析雖然會多花半天時間但能讓研究結(jié)論的底氣足很多。7. 常見問題與排查技巧實錄7.1 VMD分解結(jié)果異常怎么辦VMD分解結(jié)果不對勁的表現(xiàn)通常有三種一是分解出的模態(tài)嚴重重疊幾個分量頻率范圍高度重合二是某個模態(tài)變成了純噪聲看不出任何物理含義三是模態(tài)數(shù)量小于設(shè)置的K值出現(xiàn)空模態(tài)。第一種情況多半是alpha值設(shè)得太小帶寬過寬導致相鄰模態(tài)中心頻率互相侵占。解決辦法是加大alpha搜索范圍上限或者在OCSSA適應(yīng)度函數(shù)里增加模態(tài)重疊懲罰項。第二種情況通常發(fā)生在K值設(shè)置大于信號有效成分個數(shù)時多出來的模態(tài)會去擬合噪聲。如果OCSSA優(yōu)化出來的K偏大查看一下是不是柯西變異的擾動幅度過大導致搜索過程不穩(wěn)定。第三種情況是VMD已知的退化現(xiàn)象通常表現(xiàn)為兩個模態(tài)中心頻率最終收斂到了同一個值附近實際有效模態(tài)減少。此時除了調(diào)整參數(shù)外可以適當調(diào)大噪聲容差tau或者減少輸入信號的直流分量。7.2 訓練過程中損失不下降或梯度爆炸Loss一直不降最優(yōu)先排查的是學習率過大導致震蕩不收斂過小導致更新緩慢看起來就像沒學。其次檢查輸入數(shù)據(jù)特征值范圍是否過大、標簽是否從1開始且連續(xù)、訓練集和驗證集是否發(fā)生了數(shù)據(jù)泄露。還有一個在日常復(fù)盤里多次遇到的原因就是樣本里混入了空值或者NaN導致梯度傳播中斷。建議在數(shù)據(jù)預(yù)處理后加一條斷言語句檢查輸入張量中是否存在非有限值。梯度爆炸在LSTM類模型里更常見表現(xiàn)為loss突然跳到Inf或者NaN。常見原因是序列長度過長、梯度累積過大而BILSTM由于前后向疊加梯度幅值比單向LSTM更大。解決辦法在訓練選項里設(shè)置梯度閾值GradientThreshold為1或2這是最簡單有效的保護機制同時檢查學習率是否需要調(diào)低。7.3 模型準確率高但實際測試效果差這是最隱蔽也最讓人頭疼的問題。準確率高說明模型在測試集上記憶良好實際效果差說明模型沒有學到可泛化的故障特征。排查思路按優(yōu)先級排列第一檢查數(shù)據(jù)劃分是否合理。前面提到的“按文件劃分”一定要落實哪怕測試集損失0.5個百分點的準確率也比虛假的99.9%有價值。第二檢查VMD分解參數(shù)是否針對訓練數(shù)據(jù)過擬合。OCSSA是在訓練樣本上優(yōu)化出來的參數(shù)如果訓練樣本和測試樣本來自不同工況或不同時刻最優(yōu)參數(shù)可能并不匹配測試數(shù)據(jù)??绻r驗證時這一點經(jīng)常暴露無遺。第三看模型在混淆矩陣上的犯錯模式。如果錯誤集中在某一對故障類型之間而且和人工頻譜分析看到的現(xiàn)象一致說明模型學到的是物理上真實存在的相似性這個結(jié)果是可信的。8. 從實驗到落地的個人體會整套代碼跑通之后我個人的體會是這類“優(yōu)化算法信號分解深度學習”的組合框架核心難點不在于某個單獨模塊的實現(xiàn)而在于工程鏈路的銜接。VMD的參數(shù)空間、樣本切片的長度、網(wǎng)絡(luò)的結(jié)構(gòu)深度三者之間是環(huán)環(huán)相扣的關(guān)系。VMD分解質(zhì)量差網(wǎng)絡(luò)再怎么調(diào)也白搭網(wǎng)絡(luò)結(jié)構(gòu)不合適VMD分解得再漂亮也體現(xiàn)不出來。所以調(diào)試順序建議從前往后先用固定參數(shù)跑通全流程再引入OCSSA逐步優(yōu)化每一層改動都做一次對比實驗。還有一個心得想分享。很多人看到“優(yōu)化算法”就覺得越復(fù)雜越好恨不得把各種改進策略全塞進去。實際上OCSSA里魚鷹策略和柯西變異的引入是在標準麻雀算法的兩個缺陷處做針對性修補有明確的目的性而不是為了炫技。做這類研究如果改進策略說不出是針對哪個具體缺陷那這個改進大概率沒有實際價值。最后說一句關(guān)于Matlab的版本問題。代碼里用到了vmd函數(shù)、bidirectionalLSTM層、trainingOptions中的ValidationPatience這些功能在不同版本里接口略有差異。建議在代碼頭部加一個版本判斷或者至少在注釋里標明版本信息。遇到過不止一次因為版本接口不兼容導致的報錯不是算法問題純粹是環(huán)境問題在這個坑上摔過的人應(yīng)該都有印象。整套方案跑完從數(shù)據(jù)輸入到分類輸出每個環(huán)節(jié)的代碼和參數(shù)我都建議順手記錄在一個說明文檔里。這不是給誰看的形式工作而是隔兩個月再回頭看這套代碼時能快速想起當初為什么把alpha范圍設(shè)為[100, 3000]、為什么BILSTM隱藏單元取64。這種過程記錄在科研和工程里都是最值錢的沉淀。