Dnn代码测试方法及装置的制造方法
【专利说明】DNN代码测试方法及装置 【技术领域】
[0001] 本发明涉及软件技术领域,尤其涉及一种DNN代码测试方法及装置。 【【背景技术】】
[0002] 深度学习是大数据分析领域的热门技术,被广泛用于图像识别、语音识别、自然语 言理解等人工智能领域。深度学习算法的核心是其预测模块,实现该预测模块的一个经典 模型是深度神经网络(Deep Neural Network,DNN) 〇
[0003] 从代码角度来说,在基于深度学习的应用的代码实现中,实现DNN功能的代码(简 称DNN代码)是整个代码中的核心部分,因此对DNN代码进行测试以保证其正确性,对整个 代码质量起着关键性作用。但是,由于深度学习算法输出的是概率值,因此传统的黑盒测试 方法等并不适合DNN代码。因此,如何对DNN代码进行功能测试以确保其能做出正确的预 测,是目前亟需解决的问题。 【
【发明内容】
】
[0004] 本发明的多个方面提供一种DNN代码测试方法及装置,用以实现对DNN代码的功 能测试。
[0005] 本发明的一方面,提供一种DNN代码测试方法,包括:
[0006] 以初始矩阵作为DNN代码中实现DNN中前向计算功能的第一代码段的输入,控制 所述第一代码段运行,以获取所述第一代码段输出的初始结果矩阵;
[0007] 按照预设的第一测试次数,每次改变所述初始矩阵中的元素值,以获得第一参考 矩阵,并以所述第一参考矩阵作为所述第一代码段的输入,重新控制所述第一代码段运行, 以获取所述第一代码段输出的参考结果矩阵,判断所述参考结果矩阵中和所述初始结果矩 阵中对应于所述初始矩阵中被改变的元素值的位置上的元素值是否发生变化;
[0008] 若每次的判断结果均为是,判定所述第一代码段的逻辑正确。
[0009] 作为本发明的进一步改进,所述方法还包括:
[0010] 以所述初始矩阵作为DNN代码中实现DNN中反向传播功能的第二代码段的输入, 控制所述第二代码段运行,以获取所述第二代码段输出的初始局域梯度矩阵;
[0011] 按照预设的第二测试次数,每次改变所述初始矩阵中的元素值,以获得第二参考 矩阵,并以所述第二参考矩阵作为所述第二代码段的输入,重新控制所述第二代码段运行, 以获取所述第二代码段输出的参考局域梯度矩阵,判断所述参考局域梯度矩阵中和所述初 始局域梯度矩阵中对应于所述初始矩阵中被改变的元素值的位置上的元素值是否发生变 化;
[0012] 若每次的判断结果均为是,判定所述第二代码段的逻辑正确。
[0013] 作为本发明的进一步改进,所述初始矩阵为初始代码矩阵。
[0014] 作为本发明的进一步改进,所述第一测试次数与所述初始矩阵中的元素个数成正 比。
[0015] 作为本发明的进一步改进,所述第二测试次数与所述初始矩阵中的元素个数成正 比。
[0016] 本发明的另一方面,提供一种DNN代码测试装置,包括:
[0017] 初始控制模块,用于以初始矩阵作为DNN代码中实现DNN中前向计算功能的第一 代码段的输入,控制所述第一代码段运行,以获取所述第一代码段输出的初始结果矩阵;
[0018] 参考控制模块,用于按照预设的第一测试次数,每次改变所述初始矩阵中的元素 值,以获得第一参考矩阵,并以所述第一参考矩阵作为所述第一代码段的输入,重新控制所 述第一代码段运行,以获取所述第一代码段输出的参考结果矩阵,判断所述参考结果矩阵 中和所述初始结果矩阵中对应于所述初始矩阵中被改变的元素值的位置上的元素值是否 发生变化;
[0019] 判定模块,用于在所述参考控制模块每次的判断结果均为是时,判定所述第一代 码段的逻辑正确。
[0020] 作为本发明的进一步改进,所述初始控制模块还用于:以所述初始矩阵作为DNN 代码中实现DNN中反向传播功能的第二代码段的输入,控制所述第二代码段运行,以获取 所述第二代码段输出的初始局域梯度矩阵;
[0021] 所述参考控制模块还用于:按照预设的第二测试次数,每次改变所述初始矩阵中 的元素值,以获得第二参考矩阵,并以所述第二参考矩阵作为所述第二代码段的输入,重新 控制所述第二代码段运行,以获取所述第二代码段输出的参考局域梯度矩阵,判断所述参 考局域梯度矩阵中和所述初始局域梯度矩阵中对应于所述初始矩阵中被改变的元素值的 位置上的元素值是否发生变化;
[0022] 所述判定模块还用于:在所述参考控制模块每次的判断结果均为是时,判定所述 第二代码段的逻辑正确。
[0023] 作为本发明的进一步改进,所述初始矩阵为权重矩阵。
[0024] 作为本发明的进一步改进,所述第一测试次数与所述初始矩阵中的元素个数成正 比。
[0025] 作为本发明的进一步改进,所述第二测试次数与所述初始矩阵中的元素个数成正 比。
[0026] 在本发明中,以初始矩阵作为DNN代码中实现前向计算功能的第一代码段的输 入,控制第一代码段运行以获取代码段输出的初始结果矩阵,按照预设的第一测试次数,每 次改变初始矩阵中的元素值,获得参考矩阵,重新以参考矩阵作为第一代码段的输入,重新 控制第一代码段运行,以获得参考结果矩阵,通过比较参考结果矩阵和初始结果矩阵中对 应于被改变的元素值的位置上的元素值是否发生变化,来判断该第一代码段的逻辑是否正 确,若每次的判断结果均为发生变化,则判定第一代码段的逻辑是正确的,进而实现对DNN 代码的功能测试。 【【附图说明】】
[0027] 为了更清楚地说明本发明实施例中的技术方案,下面将对实施例或现有技术描述 中所需要使用的附图作一简单地介绍,显而易见地,下面描述中的附图是本发明的一些实 施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附 图获得其他的附图。
[0028] 图1为本发明一实施例提供的DNN代码测试方法的流程示意图;
[0029] 图2为本发明一实施例提供的前向计算过程的一种结构示意图;
[0030] 图3为本发明一实施例提供的对反向传播过程的分析示意图;
[0031] 图4为本发明一实施例提供的DNN代码测试装置的结构示意图。 【【具体实施方式】】
[0032] 为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例 中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是 本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员 在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
[0033] 图1为本发明一实施例提供的DNN代码测试方法的流程示意图。如图1所示,该 方法包括:
[0034] 101、以初始矩阵作为DNN代码中实现DNN中前向计算功能的第一代码段的输入, 控制第一代码段运行,以获取第一代码段输出的初始结果矩阵。
[0035] 102、按照预设的第一测试次数,每次改变初始矩阵中的元素值,以获得第一参考 矩阵,并以第一参考矩阵作为第一代码段的输入,重新控制第一代码段运行,以获取第一代 码段输出的参考结果矩阵,判断参考结果矩阵中和初始结果矩阵中对应于初始矩阵中被改 变的元素值的位置上的元素值是否发生变化;若每次的判断结果均为是,判定第一代码段 的逻辑正确。
[0036] 由于DNN算法输出的结果是概率值,无法采用现有测试方法进行测试。针对该问 题,本实施例提供一种DNN代码测试方法,可由DNN代码测试装置来完成,用以实现对DNN 代码的测试,填补现有技术在DNN代码测试方面存在的空白。
[0037] 在实际应用中,DNN包括训练过程和预测过程。在训练过程中,包括前向计算过程 和反向传播过程。在预测过程中,只包括前向计算过程。由此可见,前向计算过程是DNN的 核心。作为用于实现DNN的DNN代码,其需要实现DNN中的前向计算功能。基于此,可以对 DNN代码的运行过程进行中断控制,以实现对DNN代码实现的DNN中前向计算功能的代码段 进行测试,进而实现对DNN代码的功能测试。DNN代码可以只包括实现前向计算功能的代码 段,还可以包括实现反向传播过程的代码段。为便于区分,将DNN代码中实现前向计算功能 的代码段称为第一代码段,并将实现反向传播过程的代码段称为第二代码段。由于第二代 码段是可选的,所以如何对DNN代码中的第一代码段进行验证是测试的关键。
[0038] 于是,本发明发明人从不同于本领域的常规角度出发,开始对DNN中的前向计算 过程做进一步研究,发现:前向计算过程具有以下特征,并基于对这些特征的提炼和综合处 理提出了本发明技术方案。为便于理解本发明