文/張西龍 劉加躍 馬茜雅 王文玲
糧食是人類社會賴以生存和延續(xù)的物質基礎。目前我國糧食存儲損失率在4%左右,若能將損失率降到2%,每年則可以減少糧食損失幾百億斤。為了減少糧食在存儲過程中環(huán)境因素不適引起的損失,糧倉需要部署糧情測控系統(tǒng)。目前國內糧情測控系統(tǒng)采集的傳感器信號種類仍舊較為單一。
基于此,本文設計了一種基于現(xiàn)代傳感器技術、無線通信技術、物聯(lián)網(wǎng)云平臺、人工神經(jīng)網(wǎng)絡技術的糧倉環(huán)境智能監(jiān)控系統(tǒng),實現(xiàn)糧倉環(huán)境參數(shù)的多參量監(jiān)測和數(shù)據(jù)的預測預報。該系統(tǒng)主要包括數(shù)據(jù)采集、上傳、可視化以及數(shù)據(jù)預測。首先,MCU控制溫濕度傳感器采集溫濕度,并通過無線通信模塊將溫濕度數(shù)據(jù)上傳到云平臺服務器。然后在Web端檢索歷史數(shù)據(jù)并進行可視化,最后利用神經(jīng)網(wǎng)絡計算模型預測未來一段時間內的糧倉狀態(tài),管理員可以通過電腦和手機遠程監(jiān)測糧倉。
SHT20溫濕度傳感器可采集溫濕度信息。SHT20測溫誤差為0.3℃、測濕誤差為3.0%RH,通過I2C通信方式輸出采集結果。主控MCU通過PB6、PB7兩個通用IO口模擬I2C通信向SHT20發(fā)送觸發(fā)溫度測量、觸發(fā)溫度測量和讀取測量結果命令實現(xiàn)對溫濕度的采集。根據(jù)SDA 輸出的相對濕度信號SRH和溫度信號ST,可通過如下兩個公式計算相對濕度 RH和溫度 T,單位分別為 %RH、℃:
ESP8266是一個完整且自成體系的Wi-Fi網(wǎng)絡解決方案,能夠獨立運行,也可以作為從機搭載于其他主機MCU運行。通過控制ESP8266無線通信模塊,可以實現(xiàn)數(shù)據(jù)的上傳。數(shù)據(jù)上傳過程中,主控MCU通過串口向ESP8266發(fā)送相關AT指令,從而控制ESP8266連接到Wi-Fi和ThingSpeak服務器,然后將采集數(shù)據(jù)發(fā)送給ESP8266并控制ESP8266將數(shù)據(jù)發(fā)送給服務器。數(shù)據(jù)上傳到服務器之后,通過thingspeakRead()函數(shù)獲得指定時間段內的歷史數(shù)據(jù)或者指定數(shù)量的歷史數(shù)據(jù),然后調用MATLAB plot()繪圖命令,對歷史數(shù)據(jù)進行可視化,從而更加直觀地實現(xiàn)對糧倉的遠程監(jiān)控。
本文通過神經(jīng)網(wǎng)絡算法,利用三年歷史數(shù)據(jù)訓練神經(jīng)計算模型,預測未來一天內的糧倉環(huán)境狀態(tài),如最高溫度、最低溫度、平均濕度。
在訓練神經(jīng)網(wǎng)絡之前,需要對數(shù)據(jù)進行預處理,主要包括剔除異常數(shù)據(jù)、數(shù)據(jù)特征處理以及數(shù)據(jù)值域變換,從而使神經(jīng)網(wǎng)絡模型的性能更好。本文利用前三天的數(shù)據(jù)預測未來一天的數(shù)據(jù),因此把前三天的數(shù)據(jù)添加到當前數(shù)據(jù)的同一行,作為輸入的特征列,即輸入特征列變換。
經(jīng)過輸入特征列變換后,會導致一些數(shù)據(jù)缺失,在pandas中缺失的數(shù)據(jù)用Nan表示,調用pandas中的dropna( )方法,清理前三天包含Nan的數(shù)據(jù)行以及三年歷史數(shù)據(jù)中可能包含Nan的數(shù)據(jù)行。
高斯分布具有很好的理論性質,比如標準正態(tài)分布的平均值為0、方差為1,這可以使得模型的表現(xiàn)更好。因此,本文通過歸一化對數(shù)據(jù)進行了標準化處理,即將最大值和最小值縮放為0和1,將最大值和最小值之間數(shù)據(jù)分別映射到區(qū)間(0,1)內,見公式3:
超參數(shù)主要包括學習率、隱層層數(shù)、隱層神經(jīng)元個數(shù)、激活函數(shù)等。當數(shù)據(jù)量不大時,淺層模型的準確率一般較好,數(shù)據(jù)量比較大時,深度模型效果更好。本文采集的歷史數(shù)據(jù)量不很多,因此采用雙隱層的淺層網(wǎng)絡。對于環(huán)境參數(shù)預測這類回歸問題,輸出層的激活函數(shù)采用線性函數(shù),其他超參數(shù)的的搜索范圍為:
(1)隱含層0激活函數(shù):{Sigmoid,Tanh,ReLU}
(2)隱含層0神經(jīng)元個數(shù):[4,12]
(3)隱含層1激活函數(shù):{Sigmoid,Tanh,ReLU}
(4)隱含層1神經(jīng)元個數(shù):[10,25]
(5)學習率:[0.001,0.01]
對于神經(jīng)網(wǎng)絡超參數(shù)的確定,可以直接使用sklearn提供的GridSearchCV與RandomizedSearchCV兩個方法。雖然GridSearchCV相對來說一般比較耗時,但是RandomizedSearchCV隨機參數(shù)搜索不一定能保證搜索到最佳超參數(shù)分布,因此,本系統(tǒng)采用GridSearchCV方法確定最佳超參數(shù)。
使用GridSearchCV搜索參數(shù)時,先設置好本次的搜索參數(shù)范圍并構造好GridSearchCV對象,然后調用fit( )方法開始搜索,通過best_params_屬性獲得搜索結果:
(1)隱含層0激活函數(shù):Tanh
(2)隱含層0神經(jīng)元個數(shù):11
(3)隱含層1激活函數(shù):Tanh
(4)隱含層1神經(jīng)元個數(shù):18
表1:預測結果度量
圖1:錯誤率迭代曲線
圖2:最高溫度預測測試結果
(5)學習率:0.09119573070815927
神經(jīng)網(wǎng)絡的學習過程,就是根據(jù)訓練數(shù)據(jù)來調整神經(jīng)元之間的連接權(connection weight)以及每個功能神經(jīng)元的閾值。確定了超參數(shù)以后,通過sknn.mlp模塊的Layer和Regressor構造一個Regressor對象,然后調用Regressor對象的fit( )方法,訓練神經(jīng)網(wǎng)絡的連接權重和閾值。編寫store_stats( )函數(shù)跟蹤參數(shù)更新狀態(tài)、記錄錯誤率。訓練過程中,錯誤率剛開始迅速下降,最終下降到1.0%左右停止迭代,最后穩(wěn)定在0.8%左右,即精度為99.2%。訓練結束后,繪制錯誤率迭代曲線,如圖1所示。
編寫前向傳遞函數(shù)計算出預測結果后,計算均方誤差(Mean Squared Error)和精度(Accuracy)來衡量模型性能,并在同一個圖中繪制離散曲線,觀察預測值和真實值之間的差距。其中,計算均方誤差和精度的公式如下所示:
其中,N是測試數(shù)據(jù)集樣本數(shù),yout是預測值,y是真實值。
經(jīng)測試,本文訓練的神經(jīng)網(wǎng)絡模型能夠準確預測糧倉內未來一天的環(huán)境狀態(tài),其中,最高溫度和最低溫度的精度大于99%,對于濕度的預測精度稍遜。由于SHT20溫濕度傳感器的濕度傳感元件本身就有3%RH的誤差,因此97.2483%的濕度預測精度是可接受的。預測結果的均方誤差和精度如表1所示。
其中,對最高溫度的預測結果如圖2所示。
本文通過SHT20溫濕度傳感器實時采集糧倉溫濕度信息,并通過ESP8266無線通信模塊將溫濕度采集數(shù)據(jù)上傳到ThingSpeak云平臺,然后進行歷史狀態(tài)數(shù)據(jù)的可視化,從而實現(xiàn)了對糧倉狀態(tài)遠程、直觀的監(jiān)控,同時基于對歷史數(shù)據(jù)的分析以及反向傳播算法,通過訓練神經(jīng)網(wǎng)絡計算模型,實現(xiàn)對糧倉未來一段時間內的監(jiān)測數(shù)據(jù)的預測,可以對未來一段時間內的危險狀態(tài)提前采取措施,從而實現(xiàn)了智能化、現(xiàn)代化的安全儲糧。