文/张西龙 刘加跃 马茜雅 王文玲
粮食是人类社会赖以生存和延续的物质基础。目前我国粮食存储损失率在4%左右,若能将损失率降到2%,每年则可以减少粮食损失几百亿斤。为了减少粮食在存储过程中环境因素不适引起的损失,粮仓需要部署粮情测控系统。目前国内粮情测控系统采集的传感器信号种类仍旧较为单一。
基于此,本文设计了一种基于现代传感器技术、无线通信技术、物联网云平台、人工神经网络技术的粮仓环境智能监控系统,实现粮仓环境参数的多参量监测和数据的预测预报。该系统主要包括数据采集、上传、可视化以及数据预测。首先,MCU控制温湿度传感器采集温湿度,并通过无线通信模块将温湿度数据上传到云平台服务器。然后在Web端检索历史数据并进行可视化,最后利用神经网络计算模型预测未来一段时间内的粮仓状态,管理员可以通过电脑和手机远程监测粮仓。
SHT20温湿度传感器可采集温湿度信息。SHT20测温误差为0.3℃、测湿误差为3.0%RH,通过I2C通信方式输出采集结果。主控MCU通过PB6、PB7两个通用IO口模拟I2C通信向SHT20发送触发温度测量、触发温度测量和读取测量结果命令实现对温湿度的采集。根据SDA 输出的相对湿度信号SRH和温度信号ST,可通过如下两个公式计算相对湿度 RH和温度 T,单位分别为 %RH、℃:
ESP8266是一个完整且自成体系的Wi-Fi网络解决方案,能够独立运行,也可以作为从机搭载于其他主机MCU运行。通过控制ESP8266无线通信模块,可以实现数据的上传。数据上传过程中,主控MCU通过串口向ESP8266发送相关AT指令,从而控制ESP8266连接到Wi-Fi和ThingSpeak服务器,然后将采集数据发送给ESP8266并控制ESP8266将数据发送给服务器。数据上传到服务器之后,通过thingspeakRead()函数获得指定时间段内的历史数据或者指定数量的历史数据,然后调用MATLAB plot()绘图命令,对历史数据进行可视化,从而更加直观地实现对粮仓的远程监控。
本文通过神经网络算法,利用三年历史数据训练神经计算模型,预测未来一天内的粮仓环境状态,如最高温度、最低温度、平均湿度。
在训练神经网络之前,需要对数据进行预处理,主要包括剔除异常数据、数据特征处理以及数据值域变换,从而使神经网络模型的性能更好。本文利用前三天的数据预测未来一天的数据,因此把前三天的数据添加到当前数据的同一行,作为输入的特征列,即输入特征列变换。
经过输入特征列变换后,会导致一些数据缺失,在pandas中缺失的数据用Nan表示,调用pandas中的dropna( )方法,清理前三天包含Nan的数据行以及三年历史数据中可能包含Nan的数据行。
高斯分布具有很好的理论性质,比如标准正态分布的平均值为0、方差为1,这可以使得模型的表现更好。因此,本文通过归一化对数据进行了标准化处理,即将最大值和最小值缩放为0和1,将最大值和最小值之间数据分别映射到区间(0,1)内,见公式3:
超参数主要包括学习率、隐层层数、隐层神经元个数、激活函数等。当数据量不大时,浅层模型的准确率一般较好,数据量比较大时,深度模型效果更好。本文采集的历史数据量不很多,因此采用双隐层的浅层网络。对于环境参数预测这类回归问题,输出层的激活函数采用线性函数,其他超参数的的搜索范围为:
(1)隐含层0激活函数:{Sigmoid,Tanh,ReLU}
(2)隐含层0神经元个数:[4,12]
(3)隐含层1激活函数:{Sigmoid,Tanh,ReLU}
(4)隐含层1神经元个数:[10,25]
(5)学习率:[0.001,0.01]
对于神经网络超参数的确定,可以直接使用sklearn提供的GridSearchCV与RandomizedSearchCV两个方法。虽然GridSearchCV相对来说一般比较耗时,但是RandomizedSearchCV随机参数搜索不一定能保证搜索到最佳超参数分布,因此,本系统采用GridSearchCV方法确定最佳超参数。
使用GridSearchCV搜索参数时,先设置好本次的搜索参数范围并构造好GridSearchCV对象,然后调用fit( )方法开始搜索,通过best_params_属性获得搜索结果:
(1)隐含层0激活函数:Tanh
(2)隐含层0神经元个数:11
(3)隐含层1激活函数:Tanh
(4)隐含层1神经元个数:18
表1:预测结果度量
图1:错误率迭代曲线
图2:最高温度预测测试结果
(5)学习率:0.09119573070815927
神经网络的学习过程,就是根据训练数据来调整神经元之间的连接权(connection weight)以及每个功能神经元的阈值。确定了超参数以后,通过sknn.mlp模块的Layer和Regressor构造一个Regressor对象,然后调用Regressor对象的fit( )方法,训练神经网络的连接权重和阈值。编写store_stats( )函数跟踪参数更新状态、记录错误率。训练过程中,错误率刚开始迅速下降,最终下降到1.0%左右停止迭代,最后稳定在0.8%左右,即精度为99.2%。训练结束后,绘制错误率迭代曲线,如图1所示。
编写前向传递函数计算出预测结果后,计算均方误差(Mean Squared Error)和精度(Accuracy)来衡量模型性能,并在同一个图中绘制离散曲线,观察预测值和真实值之间的差距。其中,计算均方误差和精度的公式如下所示:
其中,N是测试数据集样本数,yout是预测值,y是真实值。
经测试,本文训练的神经网络模型能够准确预测粮仓内未来一天的环境状态,其中,最高温度和最低温度的精度大于99%,对于湿度的预测精度稍逊。由于SHT20温湿度传感器的湿度传感元件本身就有3%RH的误差,因此97.2483%的湿度预测精度是可接受的。预测结果的均方误差和精度如表1所示。
其中,对最高温度的预测结果如图2所示。
本文通过SHT20温湿度传感器实时采集粮仓温湿度信息,并通过ESP8266无线通信模块将温湿度采集数据上传到ThingSpeak云平台,然后进行历史状态数据的可视化,从而实现了对粮仓状态远程、直观的监控,同时基于对历史数据的分析以及反向传播算法,通过训练神经网络计算模型,实现对粮仓未来一段时间内的监测数据的预测,可以对未来一段时间内的危险状态提前采取措施,从而实现了智能化、现代化的安全储粮。