一种基于频谱的深度神经网络缺陷定位方法及系统与流程

文档序号:23589880发布日期:2021-01-08 14:25阅读:119来源:国知局
一种基于频谱的深度神经网络缺陷定位方法及系统与流程

本发明涉及软件测试技术领域,特别是涉及一种基于频谱的深度神经网络缺陷定位方法及系统。



背景技术:

深度神经网络作为机器学习的一种方法,在许多任务上的性能已经达到甚至超过了人类水平,如图像分类,语音识别,恶意软件检测等,并取得了广泛的应用,在很多场景下会代替人做出重要决策。但是,所有软件都不可避免的包含缺陷,深度神经网络也不例外。在诸如自动驾驶汽车和医学图像分析等安全关键系统中,如果深度神经网络做出的决定是错误的,将会造成非常严重的后果。例如:uber无人驾驶汽车在夜间测试的过程中发生严重事故致使一名行人死亡;苹果手机的faceid可以使用3d打印的人脸图片破解。因此,如何检测并定位深度神经网络中的缺陷,以保证深度神经网络的质量成为了软件工程和人工智能交叉领域的热点研究问题。

目前,适用于深度神经网络的缺陷检测技术受到了广泛关注,如使用蜕变测试对深度神经网络进行测试,它可以通过对比蜕变前后的数据分类是否一致来检测深度神经网络是否存在缺陷;此外,还有一些有关神经元覆盖准则的方法,它们使用了不同的方法来提高神经元的覆盖率,同时可以根据覆盖率引导的测试来检测深度神经网络中存在的缺陷。当成功检测出神经网络中存在缺陷后,应该去定位缺陷所在的地方,以便于修复缺陷。但是上述工作都无法对具体产生缺陷的位置进行定位,也不能检测出深度神经网络中的特定结构存在缺陷,如:层数过多或者过少、激活函数不正确等。

深度神经网络是一个黑盒,它可以使用大量神经元中的简单函数来模拟任何一个连续函数。从这个角度来看,深度神经网络的缺陷难以定位,因为我们无法准确的找出某一个神经元、某种结构或者某种激活函数确切的对神经网络的结果产生了什么影响。在这种情况下,如何定量分析它们对深度神经网络结果的作用就成了一个亟需解决的问题。

软件缺陷定位的目标是识别与软件缺陷相关的程序元素,它可以帮助程序开发人员更快更准确地发现程序中需要修复的地方,以提升程序的可靠性。早期的缺陷定位以人工为主,但是通过人工调试来定位缺陷不仅耗时长而且难度大。在传统的软件缺陷定位方法中,基于频谱的缺陷定位方法通过获取程序的覆盖信息来对每个程序实体进行评估。程序频谱主要是指程序执行过程中产生的关于程序语句的覆盖信息,以及执行是否通过的信息。在使用测试集对程序进行测试的过程中,需要收集程序频谱信息,最后将频谱信息代入怀疑度公式得出程序实体对应的怀疑度,怀疑度越高即说明程序实体越有可能存在缺陷。我们将这种思想运用到了深度神经网络中,提出了一种基于频谱的深度神经网络缺陷定位方法及系统,以在神经元的层面上定位深度神经网络的缺陷。该方法及系统依据深度神经网络对测试集的运行输出和分类结果量化深度神经网络中的神经元,然后利用怀疑度公式计算其怀疑度,并对其进行排名,定位到最有可能是缺陷的位置。



技术实现要素:

本发明的目的在于,提供一种基于频谱的深度神经网络缺陷定位方法及系统,实现深度神经网络的缺陷定位,将深度神经网络模型中的缺陷直观的使用数值体现出来。

本发明所采用的技术方案是:一种基于频谱的深度神经网络缺陷定位方法,具体包括以下步骤:

获取正确测试用例和错误测试用例:使用测试用例集t={t1,t2,t3,...}运行待测深度神经网络模型d,区分出正确测试用例和错误测试用例,并获取所述测试用例集t={t1,t2,t3,...}对应的运行信息集r={r1,r2,r3,...};

获取待测深度神经网络模型的频谱信息:使用所述测试用例集t={t1,t2,t3,...}运行所述待测深度神经网络模型d,获取每个神经元的输出结果;根据所述运行信息集r={r1,r2,r3,...}与所述输出结果得到所述待测深度神经网络模型d中所有神经元的频谱信息m={m1,m2,m3,...};

计算神经元的怀疑度,并按照怀疑度对神经元进行排序:根据怀疑度公式与所述频谱信息m={m1,m2,m3,...}计算出所有神经元的的怀疑度,并对神经元按照怀疑度从大到小进行排序,排序越靠前的神经元存在缺陷的几率越大。

进一步地,所述获取正确测试用例和错误测试用例包括以下具体步骤:

s11输入所述待测深度神经网络模型d和所述测试用例集t={t1,t2,t3,...};

s12选择所述测试用例集t={t1,t2,t3,...}中的一条测试用例ti运行所述待测深度神经网络模型d,获取所述测试用例ti的运行结果oi;

s13根据所述运行结果oi判断所述测试用例ti为正确测试用例还是错误测试用例,并记录所述测试用例ti的运行信息ri,如果所述测试用例ti为正确测试用例,则记所述运行信息ri=1;如果所述测试用例ti为错误测试用例,则记所述运行信息ri=0;

s14重复执行s12、s13直到所述测试用例集t={t1,t2,t3,...}中所有测试用例运行完成,得到所述测试用例集t={t1,t2,t3,...}的所述运行信息集r={r1,r2,r3,...};

s15遍历所述测试用例集t={t1,t2,t3,...}的所述运行信息集r={r1,r2,r3,...},统计总的正确测试用例个数np和总的错误测试用例个数nf;

s16输出所述测试用例集t={t1,t2,t3,...}的所述运行信息r={r1,r2,r3,...}。

进一步地,所述获取待测深度神经网络模型的频谱信息包括以下具体步骤:

s21输入所述待测深度神经网络模型d、所述测试用例集t={t1,t2,t3,...}和所述测试用例集t={t1,t2,t3,...}的所述运行信息r={r1,r2,r3,...},其中n={n1,n2,n3,...}为所述待测深度神经网络模型d中的所有神经元集合;

s22选择所述测试用例集t={t1,t2,t3,...}中的一条测试用例ti运行待测深度神经网络模型d,获取所述测试用例ti运行时各个神经元nj∈n的输出fnj(ti),并存储在文件中;

s23重复执行s22,直到所述测试用例集t={t1,t2,t3,...}中所有测试用例运行完成;

s24选择一个神经元nj,遍历其对应所述测试用例集t={t1,t2,t3,...}的输出fnj(t),如果所述运行信息集r={r1,r2,r3,...}中对应的ri=1,则将所述神经元nj的输出作为用例贡献值累加至所述神经元nj的成功贡献;如果所述运行信息r={r1,r2,r3,...}中对应的ri=0,则将所述神经元nj的输出作为用例贡献值累加至所述神经元nj的失败贡献,并将最终结果记录为所述神经元nj的频谱信息mj={nef(nj),nep(nj)},其中nef(nj)为所述神经元nj的失败贡献,nep(nj)为所述神经元nj的成功贡献;

s25重复执行s24,直到分析完所述神经元集合n={n1,n2,n3,...}中的所有神经元;

s26输出所述待测深度神经网络模型d中所有神经元的所述频谱信息m={m1,m2,m3,...}。

进一步地,所述计算神经元的怀疑度,并按照怀疑度对神经元进行排序包括以下具体步骤:

s31输入所述待测深度神经网络模型d中所有神经元的所述频谱信息m={m1,m2,m3,...};

s32获取所述神经元nj对应的频谱信息mj={nef(nj),nep(nj)},并将其代入公式(1)中计算得出所述神经元nj对应的怀疑度aj;

s33重复执行s32,直到计算完所述神经元集合n={n1,n2,n3,...}中所有神经元的怀疑度a={a1,a2,a3,...};

s34对属于所述待测深度神经网络模型d不同层的神经元分别做归一化处理,得到新的怀疑度a’;

s35对所述新的怀疑度a’中的所有怀疑度按照从大到小的顺序排列,排名越靠前的怀疑度所对应的神经元存在缺陷的几率越大;

s36输出最终的定位结果。

一种基于频谱的深度神经网络缺陷定位系统,包括:

第一数据输入模块,用于输入测试用例集t={t1,t2,t3,...}与待测深度神经网络模型d,并使用所述测试用例集t={t1,t2,t3,...}运行所述待测深度神经网络模型d;

测试用例判断模块,判断出正确测试用例和错误测试用例,并获取所述测试用例集t对应的运行信息集r={r1,r2,r3,...};

频谱信息获取模块,用于使用所述测试用例集t={t1,t2,t3,...}运行所述待测深度神经网络模型d,获取每个神经元的输出结果;根据所述运行信息集r={r1,r2,r3,...}与所述输出结果得到所述待测深度神经网络模型d中所有神经元的频谱信息m={m1,m2,m3,...};

怀疑度计算模块,计算神经元的怀疑度,并按照怀疑度对神经元进行排序,根据排序结果确定缺陷几率。

经由上述的技术方案可知,本发明公开提供了一种基于频谱的深度神经网络缺陷定位方法及系统,与现有技术相比,本发明依据深度神经网络对测试集的运行输出和分类结果量化深度神经网络中的神经元,利用怀疑度公式计算其怀疑度,并对其进行排名,可以定位到最有可能是缺陷的位置,并将深度神经网络模型中的缺陷直观的使用数值体现出来。本发明具有通用性,对所有深度神经网络模型均可使用。

附图说明

为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据提供的附图获得其他的附图。

图1附图为基于频谱的深度神经网络缺陷定位方法流程图;

图2附图为获取正确和错误测试用例的方法流程图;

图3附图为获取待测深度神经网络模型频谱信息的方法流程图;

图4附图为怀疑度计算和排序的方法流程图。

具体实施方式

下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。

本发明公开了一种基于频谱的深度神经网络缺陷定位方法,如图1所示,具体包括以下步骤:

获取正确测试用例和错误测试用例:使用测试用例集t={t1,t2,t3,...}运行待测深度神经网络模型d,区分出正确测试用例和错误测试用例,并获取测试用例集t={t1,t2,t3,...}对应的运行信息集r={r1,r2,r3,...};

获取待测深度神经网络模型的频谱信息:使用测试用例集t={t1,t2,t3,...}运行待测深度神经网络模型d,获取每个神经元的输出结果;根据运行信息集r={r1,r2,r3,...}与输出结果得到待测深度神经网络模型d中所有神经元的频谱信息m={m1,m2,m3,...};

计算神经元的怀疑度,并按照怀疑度对神经元进行排序:根据怀疑度公式与频谱信息m={m1,m2,m3,...}计算出所有神经元的的怀疑度,并对神经元按照怀疑度从大到小进行排序,排序越靠前的神经元存在缺陷的几率越大。

进一步地,如图2所示,获取正确测试用例和错误测试用例包括以下具体步骤:

s11输入待测深度神经网络模型d和测试用例集t={t1,t2,t3,...};

s12选择测试用例集t={t1,t2,t3,...}中的一条测试用例ti运行待测深度神经网络模型d,获取测试用例ti的运行结果oi;

s13根据运行结果oi判断测试用例ti为正确测试用例还是错误测试用例,并记录测试用例ti的运行信息ri,如果测试用例ti为正确测试用例,则记运行信息ri=1;如果测试用例ti为错误测试用例,则记运行信息ri=0;

s14重复执行s12、s13直到测试用例集t={t1,t2,t3,...}中所有测试用例运行完成,得到测试用例集t={t1,t2,t3,...}的运行信息集r={r1,r2,r3,...};

s15遍历测试用例集t={t1,t2,t3,...}的运行信息集r={r1,r2,r3,...},统计总的正确测试用例个数np和总的错误测试用例个数nf;

s16输出测试用例集t={t1,t2,t3,...}的运行信息r={r1,r2,r3,...}。

优选的,在本具体实施例中使用蜕变关系来判断测试用例的正确与错误,若测试用例的输出与其标签符合蜕变关系即为预测正确,记为正确测试用例,反之则为预测错误,记为错误测试用例。

进一步地,如图3所示,获取待测深度神经网络模型的频谱信息包括以下具体步骤:

s21输入待测深度神经网络模型d、测试用例集t={t1,t2,t3,...}和测试用例集t={t1,t2,t3,...}的运行信息r={r1,r2,r3,...},其中n={n1,n2,n3,...}为待测深度神经网络模型d中的所有神经元集合;

s22选择测试用例集t={t1,t2,t3,...}中的一条测试用例ti运行待测深度神经网络模型d,获取测试用例ti运行时各个神经元nj∈n的输出fnj(ti),并存储在文件中;

s23重复执行s22,直到测试用例集t={t1,t2,t3,...}中所有测试用例运行完成;

s24选择一个神经元nj,遍历其对应测试用例集t={t1,t2,t3,...}的输出fnj(t),如果运行信息集r={r1,r2,r3,...}中对应的ri=1,则将神经元nj的输出作为用例贡献值累加至神经元nj的成功贡献;如果运行信息r={r1,r2,r3,...}中对应的ri=0,则将神经元nj的输出作为用例贡献值累加至神经元nj的失败贡献,并将最终结果记录为神经元nj的频谱信息mj={nef(nj),nep(nj)},其中nef(nj)为神经元nj的失败贡献,nep(nj)为神经元nj的成功贡献;

s25重复执行s24,直到分析完神经元集合n={n1,n2,n3,...}中的所有神经元;

s26输出待测深度神经网络模型d中所有神经元的频谱信息m={m1,m2,m3,...}。

进一步地,如图4所示,计算神经元的怀疑度,并按照怀疑度对神经元进行排序包括以下具体步骤:

s31输入待测深度神经网络模型d中所有神经元的频谱信息m={m1,m2,m3,...};

s32获取神经元nj对应的频谱信息mj={nef(nj),nep(nj)},并将其代入公式(1)中计算得出神经元nj对应的怀疑度aj;

s33重复执行s32,直到计算完神经元集合n={n1,n2,n3,...}中所有神经元的怀疑度a={a1,a2,a3,...};

s34对属于待测深度神经网络模型d不同层的神经元分别做归一化处理,得到新的怀疑度a’;

s35对新的怀疑度a’中的所有怀疑度按照从大到小的顺序排列,排名越靠前的怀疑度所对应的神经元存在缺陷的几率越大;

s36输出最终的定位结果。

一种基于频谱的深度神经网络缺陷定位系统,包括:

第一数据输入模块,用于输入测试用例集t={t1,t2,t3,...}与待测深度神经网络模型d,并使用测试用例集t={t1,t2,t3,...}运行待测深度神经网络模型d;

测试用例判断模块,判断出正确测试用例和错误测试用例,并获取测试用例集t对应的运行信息集r={r1,r2,r3,...};

频谱信息获取模块,用于使用测试用例集t={t1,t2,t3,...}运行待测深度神经网络模型d,获取每个神经元的输出结果;根据运行信息集r={r1,r2,r3,...}与输出结果得到待测深度神经网络模型d中所有神经元的频谱信息m={m1,m2,m3,...};

怀疑度计算模块,计算神经元的怀疑度,并按照怀疑度对神经元进行排序,根据排序结果确定缺陷几率。

本说明书中各个实施例采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似部分互相参见即可。对于实施例公开的装置而言,由于其与实施例公开的方法相对应,所以描述的比较简单,相关之处参见方法部分说明即可。

对所公开的实施例的上述说明,使本领域专业技术人员能够实现或使用本发明。对这些实施例的多种修改对本领域的专业技术人员来说将是显而易见的,本文中所定义的一般原理可以在不脱离本发明的精神或范围的情况下,在其它实施例中实现。因此,本发明将不会被限制于本文所示的这些实施例,而是要符合与本文所公开的原理和新颖特点相一致的最宽的范围。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1