文/張西龍 劉加躍 馬茜雅 王文玲
糧食是人類社會(huì)賴以生存和延續(xù)的物質(zhì)基礎(chǔ)。目前我國(guó)糧食存儲(chǔ)損失率在4%左右,若能將損失率降到2%,每年則可以減少糧食損失幾百億斤。為了減少糧食在存儲(chǔ)過程中環(huán)境因素不適引起的損失,糧倉(cāng)需要部署糧情測(cè)控系統(tǒng)。目前國(guó)內(nèi)糧情測(cè)控系統(tǒng)采集的傳感器信號(hào)種類仍舊較為單一。
基于此,本文設(shè)計(jì)了一種基于現(xiàn)代傳感器技術(shù)、無線通信技術(shù)、物聯(lián)網(wǎng)云平臺(tái)、人工神經(jīng)網(wǎng)絡(luò)技術(shù)的糧倉(cāng)環(huán)境智能監(jiān)控系統(tǒng),實(shí)現(xiàn)糧倉(cāng)環(huán)境參數(shù)的多參量監(jiān)測(cè)和數(shù)據(jù)的預(yù)測(cè)預(yù)報(bào)。該系統(tǒng)主要包括數(shù)據(jù)采集、上傳、可視化以及數(shù)據(jù)預(yù)測(cè)。首先,MCU控制溫濕度傳感器采集溫濕度,并通過無線通信模塊將溫濕度數(shù)據(jù)上傳到云平臺(tái)服務(wù)器。然后在Web端檢索歷史數(shù)據(jù)并進(jìn)行可視化,最后利用神經(jīng)網(wǎng)絡(luò)計(jì)算模型預(yù)測(cè)未來一段時(shí)間內(nèi)的糧倉(cāng)狀態(tài),管理員可以通過電腦和手機(jī)遠(yuǎn)程監(jiān)測(cè)糧倉(cāng)。
SHT20溫濕度傳感器可采集溫濕度信息。SHT20測(cè)溫誤差為0.3℃、測(cè)濕誤差為3.0%RH,通過I2C通信方式輸出采集結(jié)果。主控MCU通過PB6、PB7兩個(gè)通用IO口模擬I2C通信向SHT20發(fā)送觸發(fā)溫度測(cè)量、觸發(fā)溫度測(cè)量和讀取測(cè)量結(jié)果命令實(shí)現(xiàn)對(duì)溫濕度的采集。根據(jù)SDA 輸出的相對(duì)濕度信號(hào)SRH和溫度信號(hào)ST,可通過如下兩個(gè)公式計(jì)算相對(duì)濕度 RH和溫度 T,單位分別為 %RH、℃:

ESP8266是一個(gè)完整且自成體系的Wi-Fi網(wǎng)絡(luò)解決方案,能夠獨(dú)立運(yùn)行,也可以作為從機(jī)搭載于其他主機(jī)MCU運(yùn)行。通過控制ESP8266無線通信模塊,可以實(shí)現(xiàn)數(shù)據(jù)的上傳。數(shù)據(jù)上傳過程中,主控MCU通過串口向ESP8266發(fā)送相關(guān)AT指令,從而控制ESP8266連接到Wi-Fi和ThingSpeak服務(wù)器,然后將采集數(shù)據(jù)發(fā)送給ESP8266并控制ESP8266將數(shù)據(jù)發(fā)送給服務(wù)器。數(shù)據(jù)上傳到服務(wù)器之后,通過thingspeakRead()函數(shù)獲得指定時(shí)間段內(nèi)的歷史數(shù)據(jù)或者指定數(shù)量的歷史數(shù)據(jù),然后調(diào)用MATLAB plot()繪圖命令,對(duì)歷史數(shù)據(jù)進(jìn)行可視化,從而更加直觀地實(shí)現(xiàn)對(duì)糧倉(cāng)的遠(yuǎn)程監(jiān)控。
本文通過神經(jīng)網(wǎng)絡(luò)算法,利用三年歷史數(shù)據(jù)訓(xùn)練神經(jīng)計(jì)算模型,預(yù)測(cè)未來一天內(nèi)的糧倉(cāng)環(huán)境狀態(tài),如最高溫度、最低溫度、平均濕度。
在訓(xùn)練神經(jīng)網(wǎng)絡(luò)之前,需要對(duì)數(shù)據(jù)進(jìn)行預(yù)處理,主要包括剔除異常數(shù)據(jù)、數(shù)據(jù)特征處理以及數(shù)據(jù)值域變換,從而使神經(jīng)網(wǎng)絡(luò)模型的性能更好。本文利用前三天的數(shù)據(jù)預(yù)測(cè)未來一天的數(shù)據(jù),因此把前三天的數(shù)據(jù)添加到當(dāng)前數(shù)據(jù)的同一行,作為輸入的特征列,即輸入特征列變換。
經(jīng)過輸入特征列變換后,會(huì)導(dǎo)致一些數(shù)據(jù)缺失,在pandas中缺失的數(shù)據(jù)用Nan表示,調(diào)用pandas中的dropna( )方法,清理前三天包含Nan的數(shù)據(jù)行以及三年歷史數(shù)據(jù)中可能包含Nan的數(shù)據(jù)行。
高斯分布具有很好的理論性質(zhì),比如標(biāo)準(zhǔn)正態(tài)分布的平均值為0、方差為1,這可以使得模型的表現(xiàn)更好。因此,本文通過歸一化對(duì)數(shù)據(jù)進(jìn)行了標(biāo)準(zhǔn)化處理,即將最大值和最小值縮放為0和1,將最大值和最小值之間數(shù)據(jù)分別映射到區(qū)間(0,1)內(nèi),見公式3:

超參數(shù)主要包括學(xué)習(xí)率、隱層層數(shù)、隱層神經(jīng)元個(gè)數(shù)、激活函數(shù)等。當(dāng)數(shù)據(jù)量不大時(shí),淺層模型的準(zhǔn)確率一般較好,數(shù)據(jù)量比較大時(shí),深度模型效果更好。本文采集的歷史數(shù)據(jù)量不很多,因此采用雙隱層的淺層網(wǎng)絡(luò)。對(duì)于環(huán)境參數(shù)預(yù)測(cè)這類回歸問題,輸出層的激活函數(shù)采用線性函數(shù),其他超參數(shù)的的搜索范圍為:
(1)隱含層0激活函數(shù):{Sigmoid,Tanh,ReLU}
(2)隱含層0神經(jīng)元個(gè)數(shù):[4,12]
(3)隱含層1激活函數(shù):{Sigmoid,Tanh,ReLU}
(4)隱含層1神經(jīng)元個(gè)數(shù):[10,25]
(5)學(xué)習(xí)率:[0.001,0.01]
對(duì)于神經(jīng)網(wǎng)絡(luò)超參數(shù)的確定,可以直接使用sklearn提供的GridSearchCV與RandomizedSearchCV兩個(gè)方法。雖然GridSearchCV相對(duì)來說一般比較耗時(shí),但是RandomizedSearchCV隨機(jī)參數(shù)搜索不一定能保證搜索到最佳超參數(shù)分布,因此,本系統(tǒng)采用GridSearchCV方法確定最佳超參數(shù)。
使用GridSearchCV搜索參數(shù)時(shí),先設(shè)置好本次的搜索參數(shù)范圍并構(gòu)造好GridSearchCV對(duì)象,然后調(diào)用fit( )方法開始搜索,通過best_params_屬性獲得搜索結(jié)果:
(1)隱含層0激活函數(shù):Tanh
(2)隱含層0神經(jīng)元個(gè)數(shù):11
(3)隱含層1激活函數(shù):Tanh
(4)隱含層1神經(jīng)元個(gè)數(shù):18

表1:預(yù)測(cè)結(jié)果度量

圖1:錯(cuò)誤率迭代曲線

圖2:最高溫度預(yù)測(cè)測(cè)試結(jié)果
(5)學(xué)習(xí)率:0.09119573070815927
神經(jīng)網(wǎng)絡(luò)的學(xué)習(xí)過程,就是根據(jù)訓(xùn)練數(shù)據(jù)來調(diào)整神經(jīng)元之間的連接權(quán)(connection weight)以及每個(gè)功能神經(jīng)元的閾值。確定了超參數(shù)以后,通過sknn.mlp模塊的Layer和Regressor構(gòu)造一個(gè)Regressor對(duì)象,然后調(diào)用Regressor對(duì)象的fit( )方法,訓(xùn)練神經(jīng)網(wǎng)絡(luò)的連接權(quán)重和閾值。編寫store_stats( )函數(shù)跟蹤參數(shù)更新狀態(tài)、記錄錯(cuò)誤率。訓(xùn)練過程中,錯(cuò)誤率剛開始迅速下降,最終下降到1.0%左右停止迭代,最后穩(wěn)定在0.8%左右,即精度為99.2%。訓(xùn)練結(jié)束后,繪制錯(cuò)誤率迭代曲線,如圖1所示。
編寫前向傳遞函數(shù)計(jì)算出預(yù)測(cè)結(jié)果后,計(jì)算均方誤差(Mean Squared Error)和精度(Accuracy)來衡量模型性能,并在同一個(gè)圖中繪制離散曲線,觀察預(yù)測(cè)值和真實(shí)值之間的差距。其中,計(jì)算均方誤差和精度的公式如下所示:

其中,N是測(cè)試數(shù)據(jù)集樣本數(shù),yout是預(yù)測(cè)值,y是真實(shí)值。
經(jīng)測(cè)試,本文訓(xùn)練的神經(jīng)網(wǎng)絡(luò)模型能夠準(zhǔn)確預(yù)測(cè)糧倉(cāng)內(nèi)未來一天的環(huán)境狀態(tài),其中,最高溫度和最低溫度的精度大于99%,對(duì)于濕度的預(yù)測(cè)精度稍遜。由于SHT20溫濕度傳感器的濕度傳感元件本身就有3%RH的誤差,因此97.2483%的濕度預(yù)測(cè)精度是可接受的。預(yù)測(cè)結(jié)果的均方誤差和精度如表1所示。
其中,對(duì)最高溫度的預(yù)測(cè)結(jié)果如圖2所示。
本文通過SHT20溫濕度傳感器實(shí)時(shí)采集糧倉(cāng)溫濕度信息,并通過ESP8266無線通信模塊將溫濕度采集數(shù)據(jù)上傳到ThingSpeak云平臺(tái),然后進(jìn)行歷史狀態(tài)數(shù)據(jù)的可視化,從而實(shí)現(xiàn)了對(duì)糧倉(cāng)狀態(tài)遠(yuǎn)程、直觀的監(jiān)控,同時(shí)基于對(duì)歷史數(shù)據(jù)的分析以及反向傳播算法,通過訓(xùn)練神經(jīng)網(wǎng)絡(luò)計(jì)算模型,實(shí)現(xiàn)對(duì)糧倉(cāng)未來一段時(shí)間內(nèi)的監(jiān)測(cè)數(shù)據(jù)的預(yù)測(cè),可以對(duì)未來一段時(shí)間內(nèi)的危險(xiǎn)狀態(tài)提前采取措施,從而實(shí)現(xiàn)了智能化、現(xiàn)代化的安全儲(chǔ)糧。