论文写作分析-基于深度时空学习网络的共享交通需求量预测-CNKI知网查重网站

论文写作分析-基于深度时空学习网络的共享交通需求量预测

2021-06-16 11:17:10
作者:杭州千明

  共享交通是共享经济中的重要业态,极大地促进了城市交通的发展。实现共享交通需求的精准预测能够帮助共享交通服务提供商更好地运营,同时也能为交通资源调度提供支撑。本文旨在研究一种深度时空学习网络模型,以解决共享交通需求量的预测问题。

  本文需要解决的问题是通过给定的纽约市自行车和出租车历史需求,预测下一时间间隔的自行车和出租车需求量。为了解决上述问题,本文设计了一种基于深度时空学习网络的预测方法。以PyTorch为模型框架,构建卷积神经网络捕获空间需求的特征,并通过长短期记忆网络(LSTM)整合多种运输需求的状态,以捕获数据的时间特征。最后通过解码器对LSTM的输出进行解码,同时预测多种需求。

  论文对训练后的模型进行了实验。实验结果表明,本文的方法能够较好的完成共享交通需求的预测。最后,论文基于PyQt5构建界面对模型进行了展示。

  近年来,共享经济作为一种新型经济模式,已经在中国呈现快速发展的趋势,并且已经上升为国家发展战略。其中共享交通是共享经济发展的重要业态,在共享经济中占据着主导地位。然而,大量涌入该领域的运输服务提供商的出现,例如滴滴、OFO、摩拜等,导致了激烈的市场竞争环境。例如,风靡一时的OFO如今已经负债累累,即将倒闭。在这种情况下,许多服务商已经意识到精确管理的重要性,而需求预测正是精确运营的重要问题之一。例如,由于乘客的出行需求具有一定的随机性。若出租司机在道路上搜寻乘客时间过长,并且共享出租服务平台不能及时根据乘客出行需求来分布和调度出租车资源,则会导致乘车服务与用户需求之间严重的供需矛盾。不仅严重影响相关运营成本,也会影响乘客的使用体验,从而损害企业形象。要解决相关的共享交通供需时空不平衡的相关问题,较为优秀的需求预测是其重要的保障。通过需求预测实现即时正确的调度,可以实现共享交通资源在时间和空间上的合理配置,从而提高整体运营效率,为运营服务商带来可观的经济效益。

  另一方面,从城市管理者的角度上看,交通拥堵等问题一直是交通管理领域棘手的问题。精确预测居民出行需求,从而合理分配交通资源,可以为交通资源调度决策提供重要的支撑。城市管理者可以对城市的各个街道路口和相关区域的交通流量数据进行分析,获取其时空分布规律,从而提高对真实交通情况的了解程度。通过对相关交通数据的了解,也能为城市规划等方面提供重要的参考依据。由此可见,实现对共享交通需求量的精准预测具有重要的现实意义。

  1.2国内外研究现状

  1.2.1交通需求量预测

  为了对交通需求量进行预测,学者已经从不同的角度提出了许多预测方法。Welch G等[1]于1960年提出了卡尔曼滤波理论,卡尔曼滤波是一种利用线性系统状态方程,通过系统输入输出观测数据,对系统状态进行最优估计的算法。之后1984年Okutani和Stephamedes[2]将卡尔曼滤波理论应用于交通需求预测问题。1976年,Box和Jenkins创建了一种应用较为广泛的整合移动平均自回归模型(ARMIMA),ARIMA模型用于时间序列预测等问题,根据历史数据的变动规律,找出数据变动模型实现对未来情况的预测。由于ARIMA的相关特点,可以针对运输需求的时间特征,将交通运输需求问题形式化为一般的时间序列预测问题,因此ARIMA及其变体被广泛应用于交通预测问题。1979年Ahamed[3]利用了ARIMA算法预测了高速公路交通流量,使用了明尼阿波利斯、洛杉矶和底特律的数据集对交通流量进行了预测。Li[4]等对杭州市2009年3月到2010年3月的出租车GPS轨迹数据进行分析,利用改进的ARIMA算法对乘客的空间分布进行预测,并最终得到了较好的预测效果。Liu[5]等通过采用基于ARIMA算法并关联历史需求和天气的相关性的方法,提出了一种空间需求预测模型。WHLin[6]等基于实时信息数据,采用高斯最大似然估计对交通预测问题进行了分析,并利用数据对模型的适用性进行了相关检验。2014年Guo J[7]等人利用自适应卡尔曼滤波模型,在高速公路数据上进行实验,通过多项指标证明了模型优于大多数传统方法和经典的卡尔曼滤波模型。Yu和Hu[8]利用马尔科夫链,将当前和最近的交通数据作为马尔科夫状态,通过对样本的训练得到转移概率,从而实现了预测。链式结构增强了特征的时序相关性,因此该模型实现了较低的误差。

  随着深度学习进入交通预测领域,深度学习方法提供了一种获取非线性关系的新颖方法,同时预测的速度和效率也得到了大幅度的提升。Lv[9]等利用堆叠的深度自编码器网络(SAE)对未来交通流量的大小进行了预测,该实验首次将深度学习模型引入交通需求预测问题,证明了深度学习方法在交通领域的可行性。Ma[10]等将某一时刻的交通流量类似成一张图片,通过采用卷积神经网络的方法去抽取数据特征,用于对交通流量进行预测。Zheng[11]等为了防止类似上海踩踏事件的事故再次发生,应用深度残差网络设计一种时空数据预测框架,通过对纽约和北京的人流量数据进行分析和处理后,成功对未来城市的人流量变化情况进行预测评估,为安保资源的调度提供了决策支持。Yao[12]等人提出了一种多视图的时空网络,该网络从三种不同的视图预测出租车需求,分别为具有卷积神经网络的空间视图,具有LSTM的时间视图以及语义视图。

  1.2.2深度时空网络

  深度学习拥有悠久而丰富的历史,最早的神经网络起源要回溯到1943年,由McCulloch和Pitts[13]提出的MCP人工神经元模型。该模型模仿了人类神经细胞的工作方式,希望能通过计算机模拟神经元的反应过程。1958年Rosenblatt[14]提出了感知器模型,能够实现单个神经元的训练。然而,单层感知器模型这样的线形模型不能解决非线性分类问题,观察到感知器模型的这个缺陷使得神经网络的发展受到制约。1986年Rumel Hart[15]等人提出了适用于多层感知器的BP算法,并采用Sigmoid进行非线性映射,对于非线性分类和学习的相关问题有着较好的效果。然而在当时,研究者们普遍认同深度的神经网络的训练存在一定的难度。造成这种认知的原因是对于当时的硬件条件来说,很难进行足够的相关实验,即实验所需的计算代价太高。因此当时的算法模型性能没有被体现出来,这使得神经网络的发展陷入瓶颈。

  深度学习的概念由Geoffrey Hinton[16]于2006年提出,Hinton解决了深层神经网络训练中梯度消失的问题。首先采用无监督的前向传播算法层层建立模型,然后通过有监督的反向传播算法在模型上实现训练微调。Hinton的研究表明相关学者如今能够训练之前难以被训练的深度网络。2012年,Hinton和学生Alex Krizhevsky[17]使用其构建的卷积神经网络AlexNet参加ImageNet图像识别比赛,并获得冠军。比赛结果表明AlexNet拥有远远高出第二名使用SVM方法的分类性能。2014年FaceBook AI研究院的人脸识别项目DeepFace[18]的识别准确率达到97%以上,拥有媲美真人的表现。深度学习方法在世界级比赛中不断取得优秀表现,这使得深度学习引起广泛的关注。

  自从深度学习被提出以来,许多研究工作将深度学习应用于时空数据挖掘。深度时空网络在许多领域得到了相关应用,包括降水临近预报,交通需求量预测,空气质量推断和犯罪事件预测等。2015年Chen[19]等人提出了ConvLSTM模型,与处理时序问题的LSTM所不同的是,该模型和CNN一样可以捕捉局部空间特征。论文通过试验证明了提出的模型在获取数据的时空关系上优于现有方法。Zheng[11]等基于时空数据创造了ST-ResNet来进行城市流动人群的预测,该模型充分分析了时空因素的相关特性并对多个模型的输出相结合完成对城市人群流量的高精度预测。Lv[20]等利用循环神经网络和卷积神经网络构建了LC-RNN实现路段级别的交通流速度精准检测,该工作通过整合卷积神经网络和循环神经网络的优点学习有意义的动态交通时间序列的模式表征。同时还对空间的拓扑特征进行了捕捉,最终将所有信息进行融合,得到了比现有预测方法更好的预测准确度。Yu[21]等人通过基于图卷积神经网络的方法构建时空图卷积网络ST-GCN,将模型的参数数量降低从而使模型具有更快的训练速度。该模型结合时间序列以及空间关系特征实现对于交通需求量的精准预测。Chen[22]等利用空气监测站提供的信息和城市数据中与空气质量相关的数据构建基于注意力机制的深度空气质量推断网络ADAIN,通过前馈神经网络以及RNN对城市中没有空气监测站的区域空气质量水平实现更加细粒度的预测。Yi[23]等提出了由空间信息转换组件以及深度分布式融合网络组成的深度时空模型DeepAir,该模型用来预测每一个空气监测站在未来48小时内的空气质量指数,在短时间段、长时间段以及突然变化的时间段下的预测都优于现有的方法,现已被空气质量预测系统部署。Wang[24]等对于稀疏的犯罪事件进行数据与处理提升预测精度,并基于ST-ResNet利用分层次的结构模型来预测洛杉矶地区的犯罪事件分布情况。以上研究工作表明随着收集数据的数据量级的增加和覆盖范围的拓宽,深度时空网络模型更加适合于复杂情况导致的事件预测工作。

  1.3主要工作内容

  论文的研究目标是通过纽约市地区对未来时刻的共享交通需求量进行预测,包括自行车和出租车两类需求量。通过纽约市自行车和出租车数据集中的大量的时空数据,构建深度时空网络模型对异构的时空数据进行学习。随后通过训练好的模型,通过各类评估方法对模型进行评估,并对模型优缺点进行分析和总结。

  1.4论文结构

  本论文的目标是研究和实现基于深度时空学习网络的共享交通需求量预测模型,论文的组织结构安排如下:

  第一部分,绪论。该部分首先对交通领域的预测问题的研究背景和意义进行了说明,并介绍了国内外研究现状。同时说明了论文的主要研究目标和内容,以及论文的组织结构。

  第二部分,相关理论简述。该部分介绍了时空数据挖掘的相关概念,以及卷积神经网络、自编码器和LSTM的相关原理和公式。

  第三部分,方法与模型。该部分首先给出了问题的形式化定义,接着说明了模型的整体框架和相关流程。最后详细说明了算法的有关步骤。

  第四部分,实验分析与展示。该部分首先对相关环境搭建和配置进行了介绍,接着介绍了实验的数据集的来源。而后对模型的具体参数和训练的流程作出详细说明,并使用该模型进行实验。接着使用相关评估指标根据实验结果对模型效果进行评估,并分析了有关实验结果出现的原因。最后,介绍了模型相关内容的展示系统。

  第五部分,结论和展望。该部分对整体工作进行了总结,评价了使用的模型以及相关实验的结果,并对研究中的缺陷和不足加以讨论。最后对未来工作进行了展望。

  第2章共享交通需求量预测理论基础简述

  本节将介绍时空数据挖掘领域有关内容,以及深度学习技术中与论文有关的卷积神经网络、自编码器和LSTM等理论知识,为本文的工作提供必要的理论支撑。

  2.1时空数据挖掘概述

  2.1.1时空数据简述

  时空数据包含了时间和空间维度信息。随着互联网技术的相关发展,人类的生活行为产生了大量拥有时间属性和空间属性的数据。例如车辆的GPS轨迹数据、人流移动数据、网约车需求订单数据等。这些数据由于其发生的时间顺序,导致其在时间属性上存在依赖和关联。例如交通流量、人群流量存在周期性,每天同一时刻的交通流量很可能保持大致的趋势。同时,时空数据在空间属性上也相互制约,不同区域内也相互影响。时空数据的空间属性包括两个方面,一个是空间距离,另一个是空间层次。根据地理学第一定律,事物与事物的相关性随着距离增加而衰减。空间距离相近的数据往往存在高度关联。另外空间存在层次性,不同的层次都有其对应的语义信息。例如城市包含几个区,这几个区又包括几个相关的街道等。

  2.1.2时空数据挖掘分类

  时空数据由于存在这些特性,因此与视频、语音、图像等相关数据不同,时空数据的时间维度和空间维度为数据挖掘任务提高了挑战性。时空数据挖掘可以通过不同的任务目标分为以下类别,如图2.1所示。

  图2.1时空数据挖掘分类图

  时空预测是指使用过去的历史相关数据,学习时空数据的变化规律,预测未来此类数据的具体数值。例如,在交通领域,利用城市中历史的订单数据,分析城市中不同区域的出行规律,从而通过相关结果预测城市中的交通出行需求。

  时空分类是指根据对应的历史时空数据,分析时空特征来预测当前研究对象所处的状态。例如为了分析城市中的交通拥堵情况,人们会利用GPS轨迹数据等获取当前车辆的速度等特征,从而分析某个路况的交通畅通等级。因此时空分类任务可以使用分类模型来预测相关问题。

  时空聚类是指根据时空数据的时间和空间特性,将具有相似时空特性的数据聚类在一个簇中,以此获得时空数据的聚合模式。时空聚类常常使用在城市规划等领域。例如,在城市规划中安放智能车的充电桩,可以通过分析有关特征挖掘出整个城市可以覆盖最多车辆的几个点来进行充电桩的安放,从而提高充电效率,尽可能减少安装成本。

  时空模式挖掘是指从时空数据中寻找具有一定用途的模式,例如周期模式、关联模式、频繁模式等。时空模式挖掘有着例如通过对出行人群轨迹数据的模式挖掘,可以找出相似群体。相关成果可以在商业、旅游业等相关领域发挥重要价值。

  时空异常检测是指通过对时空数据进行分析,识别出时空数据中的异常数据和情况,为许多实际问题的解决提供意见和参考。例如,可以通过对滴滴等网约车等GPS轨迹数据的挖掘,通过时空异常检测排查出某些异常出行轨迹。使得服务运营商可以更快地判断对应订单是否存在问题,从而降低相关服务出现安全事故的可能。

  2.1.3时空数据挖掘算法

  共享交通需求量预测属于时空数据预测范畴,目前主要存在以下几类算法,如图2.2所示。

  图2.2时空预测算法分类图

  许多研究工作采用传统时序预测领域的相关算法如ARMA,ARIMA等对时空数据进行挖掘。此类算法数学理论充足,实现相对简单。但是此类模型的复杂程度和应用场景的复杂程度呈正相关,可以看出这类模型的可扩展性和鲁棒性不强,容易受到噪声数据的干扰。同时,传统时序预测算法对于时空数据,只分析了时空数据的时间特征,而没有对其空间特征进行考虑。因此对时空数据隐藏的规律挖掘不够充分,导致预测结果并不是很令人满意。

  机器学习相关方法应用于时空预测领域时,通常将时序问题转换为监督学习问题进行处理。常见的机器学习算法有决策树、SVM等。类似于传统时序预测方法,此类模型在处理预测问题时,也没有充分利用时序数据的时空特性。因此此类模型还存在一定的提升空间。

  随着深度学习相关研究不断深入,产生了许多有意义的模型。其中,卷积神经网络可以处理空间数据,充分挖掘数据中的空间特性。循环神经网络可以处理时序数据,获取数据当中的时间特性。这些深度学习模型拥有优秀的表示能力。因此,研究者针对时空数据挖掘利用深度学习设计了许多深度时空网络,例如ConvLSTM、ST-ResNet等。随着相关研究的推进,深度学习技术在时空数据挖掘领域产生越来越重要的影响。

  2.2卷积神经网络概述

  卷积神经网络是神经网络的一种,经常被使用在图像识别、自然语言处理等相关领域,并已经逐渐成为深度学习架构的必备要素。卷积神经网络拥有深度结构和卷积运算,主要由卷积层、激活层、池化层以及全连接层组成。本节主要介绍卷积操作的重要影响。

  卷积层是卷积神经网络的重要部分,该层利用卷积核提取输入数据的特征。卷积核又被称为滤波器,通常是的二维矩阵。卷积操作选定一个卷积核在图片上滑动,每次滑动都会与输入图片矩阵进行点乘,所得到的矩阵被称为特征映射。在这个过程中,卷积核扮演着特征探测器的角色。在具体的操作中,卷积核的数值是在卷积神经网络建立的开始随机生成的,在训练过程中会根据反向传播算法调整各个卷积核的值。图2.3反应了二维张量的卷积运算。

  图2.3二维卷积图

  局部连接和参数共享是卷积运算用来帮助改进神经网络的重要思想。传统的神经网络为了描述输入和输出之间关系采用了矩阵乘法,具体表现为参数矩阵的每个参数代表输入单元和输出单元的一对一交互,这说明每个输出单元和输入单元之间都具有关联,使得传统的全连接神经网络往往拥有数目巨大的参数。因此传统的神经网络难以被训练。与传统的神经网络所不同的是,卷积神经网络中的卷积核规模远小于输入数据的规模,这使得其具有局部连接的特点。例如图像处理的过程中,对于拥有成千上万像素点的图像,如果采用全连接神经网络则会产生大量的参数。然而采用卷积核的方法只需要几十个像素点左右的规模就可以提取输入数据的一些有效特征。对于个输入和个输出的任务,进行矩阵乘法则具有个参数,时间复杂度为。如果对每一个输入控制连接的输出数量为,那么这样的稀疏连接只需要个参数,对应的运行时间为。这里的限制数量在实际使用中只需要比输出数量小几个数量级就可以获得较好的模型效果。因此,局部连接有效地减少了网络存 段的参数量和计算量。

  参数共享是指模型中多个运算共享同样的参数。对于全连接神经网络,计算输出某一层输出时,权重矩阵的任何一个元素在执行一次运算操作后便不会再使用,即在训练过程中每个位置都需要单独的参数集合进行运算。而对于卷积神经网络,卷积核在输入数据上做卷积运算时并没有变化,所有输入数据都是采用相同的卷积核进行运算。在训练时只需要对卷积核进行学习。这样网络的参数需求量被降低至个参数,并且相对于稠密参数矩阵的参数数量明显减少了几个数量级。这样使得卷积操作相对于传统的乘法运算拥有更少的存 段量和更高的计算效率。

  2.3自编码器概述

  自编码器(AutoEncoder)结构最早由Hinton[25]等人在2006年提出,自编码器首先将高维的图片信息通过编码转换成低维向量,然后根据该低维向量以及编码权重的转置来完成对原图片的还原。实验结果显示自编码器的表现优于传统的PCA方法,这表明由自编码器学习到的低维度表征完全可以存 段高维度数据中的重要信息。自编码器存在隐藏层,该层能够对输入进行编码。自编码器通过一个函数构成的编码器和一个函数构成用于重构输出的解码器组成。由于其具有将高维度信息映射为更具有实际意义的低维度信息表征的能力,因此常被用来进行高维度特征的降维,其结构如图2.4所示。

  图2.4自编码器结构图

  另一角度上看,自编码器是压缩数据的一种算法。自编码器通过训练样本学习网络结构,输出的具有一定损失的压缩数据。自编码器具有以下特点:

  (1)自编码器是数据相关的,例如在人脸识别的过程中训练的自编码器对于非人脸的图片,比如猫等类型的图片时效果就不太理想。因为训练得到的自编码器学习到的是和人脸有关的特征,而不是猫的特征。因此自编码器通常用于与训练数据有着相似特性的压缩工作。

  (2)自编码器是有损的。和无损压缩算法不一样的是,解压缩得到的输出数据不会和原来的输入数据完全一致,存在一定的信息丢失。

  (3)自编码器是从样本中自学习的,因此可以较为方便地对目标类型的输入训练出特定的编码器,而无需新的工作。

  卷积自编码器与普通自编码器类似,都能够对输入数据进行编码,再通过解码重新输出构造输入的数据。其中的区别在于卷积自编码器使用卷积层替换了全连接层,其权重在输入的所有位置是共享的,通过卷积核在图像空间滑动提取局部结构信息,保留了局部空间特性。

  在卷积自编码器的结构中,除了编码器部分使用卷积层替换了全连接层。对应地,在解码器部分使用反卷积层代替了全连接层。反卷积层的功能是实现卷积层的逆向操作,与卷积层类似地存在反卷积核。在反卷积过程中,反卷积核的参数与对应层数的卷积核的参数互为转置。

  2.4 LSTM概述

  相比于传统的神经网络模型,循环神经网络拥有循环反馈特性。循环神经网络具有定向连接成环的节点,循环结构能够利用序列的上下文信息处理任意时序的输入序列,并且在时间维度上有先后顺序,能够影响输出。隐藏层的单元之间同时拥有前馈连接和内部单元的的反馈作用。在循环神经网络中,共享的权重参数减少了训练过程中的参数量,降低了模型训练的复杂度。因此,循环神经网络在文本建模等领域有着重要作用。

  但是循环神经网络并不是万能的,当时间序列过长时循环神经网络就会出现信息难以保留的问题,即梯度消失和梯度爆炸。隐藏层接受x时刻的输入后,经过网络结构时x时刻的信息会衰减。在经过多次重复循环后,x时刻中的信息衰减程度是成指数形式增长的。时间跨度越长,衰减越明显。信息反馈的程度越来越少,到了后面的时刻,x时刻的影响已经基本消失。这使得训练过程中梯度难以在较长序列中进行传递,从而循环神经网络无法对长序列的影响进行分析。在循环神经网络的训练中,每次的梯度更新都可能会积累一定的误差,经过多次更新后会导致产生非常大的梯度,以至于无法更新网络的权值。这就是梯度爆炸导致的结果。

  由于传统的循环神经网络难以捕捉长期时间关联并且存在梯度爆炸或者梯度消失等问题,为了解决以上问题,Sepp Hochreiter[26]等人提出了拥有更强能力的LSTM模型。LSTM是一种特殊的循环神经网络结构,相较于传统RNN,LSTM被证实更加稳定且更善于捕捉长时间段存在的依赖关系。一个LSTM计算单元由一个记忆单元、一个输入门、一个输出门以及一个遗忘门组成。其中,记忆单元负责存 段任意时间长度包含的数值信息,三个门控单元则负责控制流入和流出该记忆单元的信息流。由于LSTM使用记忆单元以及门控单元来解决传统RNN结构中存在的问题,现已被成功应用在许多真实场景中的序列建模问题。LSTM的数学表达式如下所示:

  其中表示当前状态下的数据输入,表示上一时刻节点的输出,表示传递到下一时刻节点的输入,,,,,分别为上一时刻记忆单元状态信息、该时刻记忆单元状态信息、输入门、输出门以及遗忘门,表示曼哈顿乘积。LSTM单元的结构如图2.5所示。

  图2.5 LSTM单元结构图

  LSTM内部主要有三个阶段,第一个阶段是忘记阶段,通过对上一个节点传入的输入进行选择性遗忘。即通过遗忘门来控制上一个状态哪些信息需要保留哪些需要被遗忘。第二个是选择记忆阶段,这个阶段将该阶段的输入有选择性的记忆。第三个阶段是输出阶段,此时将选择当前状态的输出。

  2.5本章小结

  本章首先阐述了时空数据挖掘的相关概念,接着介绍了时空数据预测的相关算法分类,最后对卷积神经网络、自编码器以及LSTM等理论进行了详细的介绍和叙述。

  第3章共享交通需求量预测算法与模型

  本章首先对问题进行分析,针对问题的特点构建合适的算法模型。然后对问题进行形式化定义并介绍了模型的整体框架,同时详细说明了模型的构建过程。最后进行了本章的小结。

  3.1问题的定义与分析

  3.1.1问题分析

  近年来,许多研究工作者已经探索了使用深度神经网络来同时捕获需求分布的时空特征,如图3.1所示。

  图3.1时空预测问题

  这些研究有力地证明了深度时空学习网络在运输需求中的有效性。但是对于共享交通需求量预测问题仍然有以下几个问题需要讨论:

  (1)从微观角度上看,在任何时隙观察到的空间需求实际上可以分解为一系列隐藏的固定空间需求向量基的组合,如图3.2所示。

  图3.2空间需求分解

  (2)从宏观角度上看,多种运输需求在空间和时间上都紧密相关。过去的研究工作分析了时空数据的周期性等特性,例如北京市不同天数的早高峰时期人流量具有类似的属性。但是不同的共享交通工具之间的需求也存在某种联系,例如工作日的早上,出租车和自行车都会将乘客从住宅区运送到办公区域。这个例子在这里存在两种关联,一是自行车和出租车的接送点都是高度聚集在住宅区和办公区域,在空间上具有联系。二是自行车使用高峰往往和出租车使用高峰存在重合,即时间特征上存在关联。因此,共享交通需求预测问题需要考虑以上两点性质来提高运输需求预测方法的效果。

  在模型中采用上述两种思想面临一些困难。若使用经典的分解方法例如主成分分析、非负矩阵分解等只能捕捉线性组合,模型表现能力不足。同时,这些方法没有考虑到时空数据的空间特性,无法处理空间领域相关性。同时,因为需求之间的相互作用导致需求在空间和时间上相互影响,常见的需求预测方法很难对多种需求预测进行建模。

  为了解决这些问题,论文采用基于深度时空学习网络的预测方法。首先使用卷积神经网络探索需求的隐藏空间特征,通过这种方法将空间需求编码为神经网络发现的具有深度和非线性性质的空间需求基。然后,使用了接受异构数据的LSTM来同时对多种运输需求进行建模。LSTM的隐藏状态由多种运输需求动态决定。最后使用卷积自编码器的解码器来对LSTM的输出进行解码,从而预测多种需求。

  3.1.2问题的形式化定义

  共享交通需求量预测问题旨在训练一个机器学习模型,拥有能够通过给定的历史观测数据预测下一时间间隔的自行车和出租车的上下车需求量的能力。表3.1对整篇论文中使用的符号进行了说明。

  表3.1符号说明

  符号对应含义

  位置和时间间隔的集合

  订单的集合

  分别为订单和空间需求向量基的序号

  根据先前的研究工作[11],论文将整个城市划分为由行和列组成的网格图,令}代表城市中位置集合,令代表时间间隔集合。在论文中时间间隔被设置为30分钟。

  根据文献[12]的工作,定义自行车需求订单为五元组,其中和表示自行车上下车,和分别表示时间间隔和位置,表示需求订单的编号。同理可得出租车需求订单,同样由五元组构成。

  自行车需求定义为在一个时间间隔内进入或离开网格区域的自行车总数,出租车需求定义为在一个时间间隔内进入或离开网格区域的出租车总数。相关的数学描述如下:

  其中表示处于第行和第列的位置,是时间间隔,表示集合的基数。和表示在第个时间间隔位于网格范围内自行车进入和离开的总数。同理第个时间间隔位于网格范围内出租车进出的数量为和。某个时间间隔内所有区域的需求构成需求图。

  因此,问题定义为给定一组含有个时间间隔的历史观测数据,预测在时间间隔时自行车和出租车的上下车需求,如公式(3-3)所示。

  其中表示所有网格,和分别代表自行车和出租车的历史需求,是预测函数。

  3.1.3整体框架

  图3.3显示了论文的整体框架。图中绿色、橙色、蓝色和紫色四种颜色分别代表自行车上车和下车,出租车上车和下车四种运输需求。论文使用深度卷积自编码器对四种需求图进行编码,将空间需求分解为隐藏需求向量基的组合。通过编码使得需求图编码成高级特征图。异构LSTM用于混合多种运输需求的隐藏状态,编码后的高级特征图将喂入LSTM。LSTM输出下一阶段的运输需求的特征图,再经过训练好的深度卷积自编码器的解码器解码后输出预测的下一周期的运输需求。

  图3.3模型框架图

  3.2深度时空网络设计

  3.2.1空间需求分解

  为了获取不同时间间隔内需求图之间的高层次相关性,论文假设存在一些空间需求向量基,并且在不同的时间间隔内是固定的。每个空间需求向量基在对应的城市都有其独特性。同时,每个时间间隔内所有区域的需求可以看作是空间向量基的组合,定义如下:

  其中是空间需求矩阵,代表地区的需求。由公式(3-4)可知,在时间处观察到的空间需求矩阵被视作许多隐藏的空间需求向量基的组合。因此,能够被表示为空间需求向量基的组合系数,。

  为了确保空间需求向量基的表示能力,论文采用深层和非线性的方式。

  其中是嵌入层的数量,是将空间需求向量基的低层次分解转化为高级表示的函数。相应地,可以通过每一层的向量基对进行非线性分解,如公式(3-6)所示。

  其中是第层的空间需求向量基,是向量基的数量。

  论文使用深度卷积自编码器来获取城市交通的多层向量基,该模型定义如公式(3-7)、公式(3-8)所示

  公式(3-7)描述了编码器,其中特征图是编码器的输出,和是整个编码器的可训练参数。编码器的输出当作解码器的输入,公式(3-8)描述了模型的解码器,该解码器拥有编码器的对称结构,是解码器的输出结果。编码器的深度为,与解码器相同。

  对于每个时间间隔,将城市的整个需求视作一个图像,并将每个需求图传入深度卷积自编码器。这个问题就能被视作卷积神经网络表现出色的领域中的问题。编码器由层卷积神经网络构成,并使用前一层的输出用作输入。解码器具有编码器的对称结构,并且卷积神经网络层由反卷积神经网络代替。卷积层和反卷积层的描述见公式(3-9)、公式(3-10):

  是第层卷积神经网络的输出,如果,则,那么公式(3-9)、(3-10)可归结为公式(3-7)和公式(3-8)。卷积神经网络可以缩小图片的大小,特征图是的高级表示。缩小的尺寸将会被反卷积神经网络所恢复。通过编码,获得了的地图。然后将所有编码结果传入LSTM。

  3.2.2预测时间序列

  深度卷积自编码器的训练完成后,将编码器和解码器的参数进行冻结。给定需求图序列,论文通过预先训练的编码器对序列进行编码来获得高级表示。由于每个特征图都可以被看作空间需求向量基的组合,因此特征图序列可以看作是空间向量基的系数变化。将该问题转化为给出时间间隔为的历史系数,预测时间间隔中空间需求向量基的系数。这种时序问题可以被RNN求解,传统的RNN表达式如公式(3-12)所示:

  该公式通过混合当前输入和先前状态来更新隐藏状态。和分别为权重和偏置项。论文中使用的RNN应该有多个隐藏状态,定义如公式(3-13)、(3-14)、(3-15)、(3-16)所示:

  分别代表自行车上下车、出租车上下车的隐藏状态信息,是更新隐状态的函数。可以被分解为独立的输入,如公式(3-17)所示。

  根据上述公式,四种隐状态被定义为:

  在时间预测问题中,由于梯度爆炸和梯度弥散等问题,基本的RNN被逐渐抛弃。LSTM被提出来解决相关问题,并在语音识别等相关领域得到了普遍的应用和研究。经典的LSTM可以用于同构的时间序列数据,但是使用LSTM并不方便直接处理异构的时间序列数据。因此论文采用了异构的LSTM模型,其数学表达式如公式(3-19)、(3-20)、(3-21)、(3-22)、(3-23)、(3-24)所示:

  LSTM接受作为输入。其中是输入门,是遗忘门,能够帮助旧细胞状态忘记一些信息。控制LSTM在时间间隔时的输出,是哈达玛积。可以看出可以影响的预测,这表明异构序列数据将相互作用。图3.4是论文中使用的LSTM的结构图。

  图3.4异构LSTM结构图

  3.2.3融合信息预测

  异构LSTM的输出将传入全连接层,如公式(3-25)所示:

  是输出结果,是在时间异构LSTM的输出,是重构函数。同样地,可以被分为单独的输出:

  最后,利用解编码器对进行解码,得到预测结果。如前文所述,解码器的参数需要从预先训练好的卷积自编码器中复制出来。下面是该过程的数学表述。

  其中是预测值,是解码器。并通过最小化实际值和预测值之间的均方误差来训练模型,如公式(3-31)所示:

  在公式(3-31)中,是损失函数,是所有被训练的参数。论文中使用Adam优化算法来进行优化。Adam[27]是一种通过输入数据迭代更新神经网络参数的优化算法。传统的随机梯度下降算法使用固定不变的学习率更新所有的参数,即在训练过程中不会因为相关结果而变化学习率。而Adam采用自适应性的学习率,通过计算相关参数来调整学习率的数值。这是Adam算法和随机梯度下降算法所不同的特点。

  3.3本章小结

  本章说明了论文所要解决的共享交通需求量预测问题,目标是通过训练一个机器学习模型,解决给定的交通时空数据预测下一时间间隔的两类共享交通上下车需求量的能力。同时对问题进行分析,从微观和宏观两个角度对问题的特点进行阐述。最后根据问题的特点基于深度时空学习网络构建合适的网络结构来解决相关问题。

  第4章仿真实验设计与分析

  本章对构建的模型进行相关实验和分析,首先介绍了实验所配置的环境和模型使用的数据集。然后详细说明了模型的参数结构和模型具体的训练过程,在得到实验结果后对相关结果进行分析并解释。最后介绍了使用PyQt5制作的相关展示界面。

  4.1仿真实验配置

  4.1.1环境搭建

  论文使用了PyTorch用于模型的搭建,PyTorch由Facebook人工智能研究院推出,是一个基于Python的灵活的深度学习框架。PyTorch能够即时构建和运行计算图,还具有GPU加速和分布式训练等功能。使用PyTorch能够方便的构建需要的模型和验证实验结果,同时还可以将模型转换为ONNX格式以迁移至其他深度学习框架。为了便于管理相关环境,使用开源的Python包管理器Anaconda安装PyTorch以及其他所需要的包。

  Anaconda是Python的一组软件包,通过自带的conda包管理可以对需要的软件环境进行管理。Anaconda涵盖了在数据科学领域常用的软件包和科学计算包,通过Anaconda可以较为方便地对各种第三方包进行管理,同时也能够创建并管理多个版本的Python环境。Anaconda官网提供了不同系统不同Python版本对应的版本下载地址,利用对应的安装包安装即可。

  下载Anaconda完成后,系统默认的Python会变为随Anaconda所安装的Python版本。Anaconda安装后会在系统中创建一个默认的Python环境,在命令行下输入“conda list”就可以列出默认环境中已经安装的所有包。若不创建虚拟环境,在终端输入“conda install pytorch torchvision-c pytorch”指令可在base环境下载PyTorch。在安装完成后创建测试程序,导入torch模块无报错说明安装成功。

  论文使用PyCharm作为集成开发环境,采用远程连接GPU服务器进行相关实验。通过设置PyCharm添加远程服务器并选择SFTP连接方式,利用服务商提供的ssh指令配置服务器连接信息,如服务器主机ip、用户名和密码。尝试SFTP连接成功后选择对应项目代码地址的映射地址关系,此时可以上传相关代码到远程服务器。接着配置Python解释器,使用远程主机的Python地址作为解释器地址,找到项目对应的解释器栏,选择SSH interpreter,填写远程服务器Python解释器的具体地址并建立映射。配置完成后使用torch.cuda.is_available()查看解释器是否可用,可用后即可上传并运行代码以及远程调试,运行结果在Pycharm上显示,并自动下载至本地。调试代码时选择本地代码进行修改,保存后远程服务器会对代码进行自动同步。

  4.1.2数据集介绍

  数据集采用NYC OpenData平台提供的纽约市出租车和自行车订单数据。纽约市自行车共享系统会生成自行车订单,并将其放在城市自行车官方网站上,收集了从2016年4月1日到2016年6月30日300万条交易记录。该数据集包含自行车站点,上车和下车时时刻,行程持续时间等。纽约出租车数据包含从2016年4月1日至2016年6月30日在纽约的3500万条出租车出行记录,平均每天产生约38万辆出行记录。其包含以下信息:上车时间、下车时间、上下车经度、上下车纬度、行程距离等。

  论文所讨论的区域是一个14公里8.4公里的矩形,覆盖布鲁克林,纽约西部和曼哈顿岛的一部分。将该区域划分成2020的网格,大小为0.72km0.72km,如图4.1所示。由于单位网格是矩形,相比于正方形的网格来说可以方便保护和进一步提取空间相关性。

  图4.1数据集划分区域图

  数据集中时间间隔设置为30分钟,即用于训练异构LSTM的数据的时间间隔是从0:00am到0:30am、0:30am到1:00am、1:00am到1:30am,依次类推。根据之前的相关研究[28],数据集的小尺寸将会损害自动编码器学习高阶特征的能力,因此用于训练的深度卷积自编码器的数据集比用于训练异构LSTM的数据集大8倍。这一数据扩展通过时间偏移实现,将0:10am至0:40am、0:40am至1:10am等需求图添加到数据集中,以训练卷积自编码器,如图4.2所示。

  图4.2数据集扩展

  HDF5文件是一种能够存 段多种科学数据的容器,由两种基本数据单元group和dataset所构成。其优点是支持子集切片和部分IO,从而易于读取。论文中的数据集被封装为HDF5格式。

  4.1.3模型方法

  论文所使用的卷积自编码器包含6层,在PyTorch中的主要实现部分如下所示:

  self.encoder=nn.Sequential(nn.Conv2d(1,filter_num[0],(3,3),stride=1,padding=0),

  nn.Conv2d(filter_num[0],filter_num[1],(3,3),stride=1,padding=0),

  nn.Conv2d(filter_num[1],1,(3,3),stride=1,padding=0))

  self.decoder=nn.Sequential(nn.ConvTranspose2d(1,filter_num[1],(3,3),stride=1,padding=0)

  nn.ConvTranspose2d(filter_num[1],filter_num[0],(3,3),stride=1,padding=0)

  nn.ConvTranspose2d(filter_num[0],1,(3,3),stride=1,padding=0))

  nn.Sequential是torch模块中的一个有序容器,该模块根据构造函数中传递的顺序添加到模块中,按照需求将不同的函数组合成一个模块使用或者将组合的模块加入自己所构造的网络中。

  编码器由self.encoder创建,编码器包含3层卷积层,并全都由nn.Conv2d()实现。第一层参数in_channels=1,代表需求图的深度为1。3层卷积层的滤波器内核大小皆为33,较小的卷积核可以减少计算的参数量。filters[0]是传入的网络配置参数,即out_channels被设置为16。步长和padding分别设置为0和1,在卷积层中这两个参数是一致的。输入数据的维度为[16,1,20,20];16是batch_size,即一个batch中样例的个数为16。当前图的深度为1,需求图的高和宽为2020。在经过第1层卷积层后,输出数据的维度为[16,16,18,18],这代表通过卷积层后输入的需求图已经转换为16个1818的特征映射图。第2层卷积层的out_channels为14,输出数据的维度为[16,14,16,16],该卷积层将输入的16个1818的特征映射图转换成14个1616的特征映射图。第3层卷积层的out_channels为1,输出数据的维度为[16,1,14,14]。每一层的out_channels与下层卷积时卷积核的in_channels相等,最后编码器将输入的2020的需求图转换成1414的高层次特征图。

  类似地,解码器由self.decoder创建,包含3层反卷积层,全部由nn.Sequential()实现。整个网络采用相同大小的卷积核尺寸(3,3),网络的步长为1,padding为0。相关参数in_channels和out_channels与编码器拥有对应的数值,第一层的in_channels和out_channels分别为1和14,第二层和第三层为14和16、16和1。通过解码器,1414的特征图最终被扩大图像的尺寸得到2020的需求图。

  根据整体模型,四种需求图通过编码器编码后输出缩小尺寸后的特征图并被输入至LSTM,LSTM输出下一时间段的特征图并利用解码器输出完整的预测结果。因此在网络结构中需要加载训练完成的解码器,在定义LSTM结构前令解码器对应的网络子图的参数requires_grad为False,这样就可以在反向传播的过程中就不会计算这些参数对应的梯度,从而对其相关参数进行冻结,也就防止了编码器再被训练。

  LSTM模型由nn.LSTM()创建,input_size即输入数据的特征维度为784,这是由输入数据是4类经过编码器处理过的到的1414的特征图决定的。输入数据是3维的张量,规格为[32,8,784],每一维的意义为batch_size、序列个数和输入的元素。由于batch_size在第一维度,所以定义的网络中batch_first为True。隐藏层的特征维度hidden_size与input_size相同,这样输出结果可以重构维度后通过解码器。num_layers设置为1。h_n保存了最后一个时间步的输出,将其结果转换成[32,4,14,14]的格式后对于每种特征图通过其对应的解码器还原成2020的需求图。

  4.1.4评估方法

  论文使用均方根误差(Root Mean Squared Error)和皮尔逊相关系数(Pearson Correlation Coefficient)两个衡量指标来对模型进行性能评估。

  RMSE被广泛地应用在回归等问题的误差衡量中,其定义如公式(4-1)所示:

  其中代表样本集合内的样本总数,和分别代表第个样本在时刻的真实值和预测值。

  PCC常常用来衡量两个变量之间的线性相关性,数值越大则表明两个变量之间的相关性越强。PCC的数值范围为-1到1之间,如果等于1则代表完全正相关,若为0则认为两者无关,若为-1则代表负相关。其公式如公式(4-2)所示:

  其中,和分别是和的平均值。

  4.1.5模型训练

  论文采用json文件管理实验的相关配置参数,如数据集的名字、网络有关参数、训练集和验证集在数据集中所占的比例等。若要获取保存的有关参数,首先使用os.path.dirname(__file__)得到绝对路径,从而找到json文件的位置。再利用json.load()读取json格式文件,将参数转换为成字典,之后便可以通过键获取所需要的值。

  为了得到能够喂入LSTM模型的数据,首先需要得到可用的卷积自编码器。对四类用于预测不同运输需求的卷积自编码器进行训练,采用h5py.File()读取数据集,使用np.random.shuffle()将数据随机打乱后利用torch.from_numpy().float()将numpy数据类型转换为torch类型;验证集在数据集中所占的比例设置为0.1,这样10%的数据用作验证集防止模型过拟合以及增加模型的泛化性。将训练集和验证集的数据通过DataLoader来包装并用于批训练。

  在卷积自编码器的训练过程中,epoch设置为10,每个batch的大小为16,loss值的计算使用RMSE。学习率调整策略通过optim.lr_scheduler.ReduceLROnPlateau()来实现,在训练过程中不断调整网络的学习率逐渐改善网络的性能。为了使实验时效果更明显,使用python模块中的Tqdm来可视化训练进度。Tqdm是一个能够实现Python进度条的包,可以为程序增添进度提示。running_loss计算所有batch的损失和,即一个epoch的损失,再除以样本总数得到平均的loss值。若某一轮验证集的loss值最佳,那么使用save_dict.update()更新保存的最优网络模型。

  卷积自编码器训练完成后,需要获取训练LSTM所需要的数据。与训练卷积自编码器不同的是,四种不同类型的数据集分别用于训练四类卷积自编码器,而LSTM的数据输入包含所有种类的数据集。通过h5py.File()读取四类数据,并存放在列表中。此时为了训练LSTM,喂入网络中的应该是编码后的特征图,因此对读取的数据分别通过对应的编码器并获得编码结果。由于设置的LSTM喂入的序列数为8,因此8张特征图输出1张需求图。设数据集有张需求图,那么第1~7张特征图对应第8张需求图,第2~8张特征图对应第9张需求图,第n-7~n-1张特征图对应第n张需求图。这样就可以构造出训练LSTM所需要的数据集。在训练LSTM之前,还需要将整个数据集分成训练集、验证集和测试集。训练集用于训练模型,验证集用于选出并保存最优的模型,测试集用于对结果进行性能评估;包含约3300张用于训练的需求图和约670张的测试图。

  LSTM的训练同样使用optim.lr_scheduler.ReduceLROnPlateau()实现学习率的调整,并采用tqdm使得代码运行进度可视化。由于LSTM的输出结果经过解码后,生成四种不同类型的需求。因此训练时的running_loss需要计算4种需求单独的预测RMSE值和总的RMSE值,并分别存 段。更新训练网络则采用总的RMSE值。

  整体训练过程如图4.3所示。

  图4.3整体训练过程图

  4.2实验结果与可视化

  论文首先将模型的各个阶段的训练过程中loss值变化情况可视化,而后对最终的评估指标结果对模型效果进行分析。

  4.2.1结果分析

  论文针对纽约市自行车和出租车的乘车需求进行实验,并使用tensorboardX可视化训练过程。如图所示,图4.4、4.5、4.6、4.7、4.8分别为训练四种不同需求量对应的卷积自编码器时RMSE变化图。其中横坐标表示epoch的次数,纵坐标表示RMSE数值。橙色线代表训练集的变化结果,蓝色线是验证集的变化结果。

  图4.4 bike_pick训练图图4.5 bike_drop训练图

  图4.6 taxi_pick训练图图4.7 taxi_drop训练图

  由实验结果可以看出,随着epoch次数的增加,RMSE值逐渐减少,从第6次开始该曲线逐渐接近直线,说明算法模型已经收敛。同时可以发现,与出租车的乘车需求相比,自行车的RMSE值较小;这是因为出租车的需求量远远超过自行车的需求量。四种卷积自编码器在训练中已经达到较好性能。

  卷积自编码器训练完成后,将编码后的数据喂入LSTM并进行相关训练。图4.8是LSTM训练过程中RMSE的变化趋势。其中横坐标为epoch次数,纵坐标为RMSE值,橙线、蓝线和红线分别是训练集,测试集和验证集阶段的数据。

  图4.8 channel_total训练图

  从图4.8可以看出,测试集的RMSE较好值在2.55左右。随着epoch训练次数的增加,训练集的RMSE值在不断减少,而测试集和验证集的RMSE在趋向平缓后又稍有增加的趋势。对于这样的结果,论文分析导致的原因可能是在训练后期模型有过拟合的倾向。导致在后期测试集和验证集的RMSE值出现回升。

  论文还分别计算了LSTM训练过程中四种需求的预测和真实值之间的RMSE变化趋势,如图4.9、4.10、4.11、4.12所示。channel0、channel1、channel2、channel3分别代表自行车和出租车接送需求。与图4.8类似,横坐标为epoch次数,纵坐标为RMSE值,橙线、蓝线和红线分别是训练集,测试集和验证集RMSE的变化趋势。

  图4.9 channel0训练图图4.10 channel1训练图

  图4.11 channel2训练图。图4.12 channel3训练图

  可以看出,单独计算的四种不同预测需求的RMSE变化趋势大致与总体RMSE相似。值得注意的是,预测出租车的RMSE结果比自行车要高出不少。论文认为该结果的原因同样是因为出租车的需求量相对与自行车较大,导致预测效果没有自行车效果好。

  表4.1给出了模型在四种不同运输需求下的表现结果。

  表4.1实验结果图

  bike_pick bike_off taxi_pick taxi_off

  RMSE 2.4819 2.5252 8.3853 7.4696

  PCC 0.9107 0.9242 0.9683 0.9734

  由表4.1可以得出四种预测需求的PCC都有较高值,可以认为预测结果和真实情况有着较高的相关性。

  从实验结果可以看出,模型的表现在四种不同预测需求上有着较好的效果,主要原因如下:

  (1)模型对时间和空间特征进行了综合考虑,并使用了不同的结构来对相关种类的特征进行处理,具体来说,空间特征使用卷积自编码器提取,时间特征使用LSTM处理。

  (2)相比于直接向模型输入高维度特征,模型首先将高维度特征输入至卷积自编码器中进行中进行编码,从而得到更加富含意义的高层次表征信息,这在一定程度上使模型更易于训练且提升了模型的效果。

  4.3界面实现

  论文使用Python语言和PyQt5工具包完成了系统界面的创建工作,并将相关训练结果在界面上展示。

  4.3.1PyQt5简介

  PyQt是用来编写GUI应用界面的工具包,支持多个版本的Python。PyQt能够通过Python对Qt库中的相关函数进行调用,并支持多个操作系统。目前最新的PyQt版本是5.14.2,所以将PyQt称呼为PyQt5。

  Qt是一个跨平台图形用户界面开发库,由挪威TrollTech公司使用C++编写,是界面开发的高效工具。Qt具有较为丰富的模块,同时因为采用C++编写,因此编写出来的GUI的风格类型和所使用的操作系统的风格一致,并且界面有着较高的运行效率。

  PyQt5最显著的优势是Python语言和Qt库的融合,在保留了Qt高运行效率的同时,也因为Python开发程序的便捷性提高了相关工作的开发效率。PyQt5封装了Qt库,拥有超过300个类,近6000个函数和方法,因此PyQt5能够解决Qt库所能够解决的事情。

  安装PyQt5需要在终端执行“pip install PyQt5”,若使用其他方式安装PyQt5相关模块,可能会在程序编译时缺少某些模块。

  4.3.2系统功能结构

  论文中使用的展示系统是使用PyQt5和Python编写的GUI应用程序,该展示系统按照功能划分成以下几个模块,分别为自编码器参数展示模块、LSTM模型展示模块、训练过程展示模块和退出界面模块。对应的系统功能结构图如图4.13所示。

  图4.13系统功能结构图

  4.3.3界面展示

  如图4.14所示,该界面是展示系统的主界面。使用PyQt5中的QApplication类管理GUI的主要设置,每一个PyQt5程序都需要有一个QApplication对象。在程序开始时使用app=QApplication(sys.argv)创建实例,其中sys.argv是传入的参数列表。程序末尾使用sys.exit(app.exec()),这样创建的实例app就会调用exec_()方法使得程序运行主循环并等待调用exit()结束程序。

  PyQt5中有三类窗口,分别是QMainWindow、QWidget和QDialog。QMainWindow类创建一个主应用程序窗口,附带有可以修改的菜单条、状态条和工具条。本系统的主界面即采用QMainWindow实例化。QWidget类是通用窗口类,GUI界面对象的控件和窗口都最终继承自QWidget类。作为通用窗口类,在界面开发过程中,对于不明确创建哪种窗口类时的情况,便可以使用QWidget类。QDialog是对话框窗口类,由于对话框主要用来和使用者进行互动,执行短期任务。因此相比于QMainWindow类来说QDialog没有工具条等内容。主界面按钮点击出现的界面都是QDialog创建的实例。

  主界面拥有5个按键,由按钮类QPushButton创建。通过调用setStyleSheet方法调整按键颜色以美化按键。按键采用信号槽机制完成系统的退出和新界面的打开工作。信号槽机制是PyQT5的重要机制。该机制有两个概念,分别为信号和槽。其中信号可以被视为一个事件,或者是对事件发生的通知,该事件可以被观察者所观察。对应地,槽就是能够观察到事件的观察者,具体例如被调用的函数。当改变事件的状态的时候就能够传递信号。对于退出按钮pushButton_exit,通过该控件的方法clicked.connenct()使点击事件发出信号,并和槽函数连接。这样信号和槽函数的连接就成为观察者与被观察者之间的关系。当点击退出界面的按钮时,关闭界面的事件就会被响应,这样就完成了相关操作。其他几个按钮也是通过信号槽机制完成界面的打开工作。

  界面的背景采用label的setPixmap方法,将目标图片设置为该label的背景图片,同时覆盖至整个界面,即可完成背景的修改操作。界面的标题则采用setWindowTitle方法修改标题名字。

  图4.14软件主界面

  图4.15展示了卷积自编码器的每层输出维度、模型的总参数量和训练的参数量等有关信息。使用QtextBrowser显示相关文本,采用QLabel类的实例的setPixmap方法显示背景和自编码器参数图片,该图片由torchsummary模块生成。同样使用了pushButton实现关闭界面功能。

  图4.15自编码器参数展示界面

  图4.16是LSTM模型显示界面,与自编码器参数展示界面类似,都是使用QtestBrowser显示相关文本,label的setPixmap方法显示LSTM结构图片和背景等。由于LSTM是动态网络模型,难以用现有的可视化工具查看其网络结构。因此界面采用展示输入流程图的形式说明。并在相关文本说明了LSTM的具体参数和训练流程。

  图4.16 LSTM模型显示界面

  图4.17和图4.18分别是两个阶段训练过程的模型训练图,两者的界面采用了相似的构造方法。通过构造四个QLabel类的实例并调用setPixmap方法显示训练结果,同时使用QcheckBox的toggled[‘bool’].connect()方法将按键和四个label关联起来。通过是否打勾来确定对应的训练过程是否显示。图4.17中四个选择键都被勾选,因此对应的四张实验结果图全部显示。而图4.18显示了只勾选了一个选择键的显示情况。与按钮的字体颜色修改类似,QcheckBox所创建的实例也可以调用setStyleSheet方法对字的颜色进行修改。