Cnn代码测试方法及装置的制造方法_3

文档序号:9396796阅读:来源:国知局
权重矩阵W中, <=辦(ΣΙα*%),类似的,41)=切心),< 和表示输出的result矩阵;Xi表示该全连接层的输入矩阵X中的第i个元素,X。= 0, 一般为前一全连接层的输出,或最后一个下采样层的输出;wu、wi2和w i3权重矩阵W中的元 素;#为激活函数。
[0073] 发明人在研究过程中发现:W11只在计算if时用到,在计算^和#时并没有使 用。若改变W11中的一个元素的值(假设将w 21修改为0),则应该只有 <发生改变,而af和 ?f不应发生变化。由此可见,通过改变作为全连接层的输入的权重矩阵中的元素值,判断 作为全连接层的输出的result矩阵中相应位置的元素值是否发生变化,可以达到判断实 现全连接层功能的代码段的逻辑是否正确。
[0074] 进一步结合图5可知,输入矩阵X = [X。,X1, x2, X3]是一 1行4列的矩阵,作为初 始矩阵的权值矩阵W是4行3列的矩阵,作为输出的结果矩阵A = X*W是1行3列的矩阵。 其中,W中第几列的元素值发生变化,那么结果矩阵A中第几列的元素值就会发生改变。由 此可见,根据W中发生改变的元素值,很容易确定结果矩阵A中哪个或哪些位置上的元素值 会发生变化。
[0075] 综上可知,虽然作为输入的矩阵可能不同,但总的判断思路是相同的,即均可以通 过改变作为输入的矩阵中的元素值,然后判断作为输出的矩阵中相应位置的元素值是否发 生变化,从而达到判断某层功能是否正确的目的。
[0076] 结合上述,本发明提出对CNN代码进行测试的方法,具体如下:
[0077] 控制CNN代码实现的CNN中的卷积层、下采样层和全连接层分别作为待测试层,则 通过对待测试层进行测试就可以实现对CNN代码的测试。
[0078] 进一步考虑到CNN代码会包括用于实现不同层功能的代码段,这里实现某一层功 能的代码段是以实现该层功能的主要代码为核心,也包括为实现该层功能提供辅助作用的 代码,例如一些进行初始化的代码等。因此,对待测试层的测试也就是对实现待测试层功能 的代码段的测试。具体测试原理如下:
[0079] 首先,以初始矩阵作为CNN代码中实现待测试层功能的代码段的输入,控制该代 码段运行,以获取代码段输出的初始结果矩阵。
[0080] 在上述步骤中,控制代码段运行,可以是单独运行该代码段,或者也可以是控制 CNN代码从头运行直到该代码段,具体是CNN代码实现结构而定。
[0081] 在上述步骤中,初始矩阵是代码段的输入,初始结果矩阵是代码段的输出。其中, 初始矩阵可以是为测试而预先设定的符合代码段输入要求的矩阵,也可以是CNN代码运行 过程中待测试层的上一层的输出。
[0082] 接下来,按照预设的测试次数,每次改变初始矩阵中的元素值,以获得参考矩阵, 并以参考矩阵作为代码段的输入,重新控制代码段运行,以获取代码段输出的参考结果矩 阵,判断参考结果矩阵中和初始结果矩阵中对应于初始矩阵中被改变的元素值的位置上的 元素值是否发生变化;若每次的判断结果均为是,判定该代码段的逻辑正确。
[0083] 值得说明的是,在改变初始矩阵中的元素值过程中,对被改变的元素值的个数不 做限定,可视具体情况而定。一般来说,优选改变一个元素值,这样处理起来相对简单,效率 较高,成本较低。
[0084] 值得说明的是,一次测试成功并不能说明一定是正确的,因此本实施例中设定测 试次数,对待测试层进行多次测试,如果每次测试都是成功的,那么就可以判定实现待测试 层的代码逻辑是正确的。本实施例并不限定测试次数的具体数值,例如可以是3次,5次,10 次,甚至更多次,可视具体情况而定。另外,对于待测试层为CNN中不同层时,也可以设置不 同的取值。例如对于待测试层为卷积层时可以设置测试次数为10次,对于待测试层为下采 样层时可以设置测试次数为5次。
[0085] 若实现各层功能的代码段的逻辑都正确,则可以判定整个CNN代码的逻辑是正确 的;反之,若实现某层功能的代码段的逻辑错误,则可以判定该CNN代码的逻辑是错误的, 而且还可以确定该CNN代码中可能发生错误的代码位置。
[0086] 进一步,对于待测试层为下采样层的情况,在上述每次测试都成功的情况下,在判 定代码段的逻辑正确之前,还可以根据下采样层使用的下采样方法,确定参考矩阵中与参 考结果矩阵中对应位置上的元素值是否满足下采样方法要求的数值关系,若确定参考矩阵 中与参考结果矩阵中对应位置上的元素值满足下采样方法要求的数值关系,则可以判定代 码段的逻辑正确。或者
[0087] 对于待测试层为下采样层的情况,在上述每次测试都成功的情况下,在判定代码 段的逻辑正确之前,还可以根据下采样层使用的下采样方法,确定初始矩阵中与初始结果 矩阵中对应位置上的元素值是否满足下采样方法要求的数值关系,若确定初始矩阵中与初 始结果矩阵中对应位置上的元素值满足下采样方法要求的数值关系,则可以判定代码段的 逻辑正确。
[0088] 进一步,也可以根据下采样层使用的下采样方法,确定初始矩阵中与初始结果矩 阵中对应位置上的元素值是否满足下采样方法要求的数值关系,并确定参考矩阵中与参考 结果矩阵中对应位置上的元素值是否满足下采样方法要求的数值关系,若确定初始矩阵中 与初始结果矩阵中对应位置上的元素值满足下采样方法要求的数值关系,且确定参考矩阵 中与参考结果矩阵中对应位置上的元素值满足下采样方法要求的数值关系,则可以判定代 码段的逻辑正确。
[0089] 上述将通过改变作为上述代码段输入的矩阵中的元素值,然后判断作为上述代码 段输出的矩阵中相应位置的元素值是否发生变化的测试逻辑,与判断作为上述代码段输入 的初始矩阵或参考矩阵中和作为上述代码段输出的初始结果矩阵或参考结果矩阵中对应 位置上的元素值是否满足下采样方法要求的数值关系的测试逻辑相结合的测试方法,测试 思路更为缜密,测试结果更为精确。
[0090] 在一可选实施方式中,考虑到CNN模型一般包括多个卷积层、多个下采样层以及 多个全连接层,为了更加全面的测试CNN代码的逻辑是否正确,可以按照CNN中卷积层、下 采样层和全连接层之间的连接顺序,依次控制CNN中的所有卷积层、下采样层和全连接层 分别作为待测试层。举例说明,假设CNN包括三个卷积层、三个下采样层和三个全连接层, 即可以依次将卷积层、下采样层、卷积层、下采样层、卷积层、下采样层、全连接层、全连接 层、全连接层作为待测试层进行测试。
[0091] 在另一可选实施方式中,为了减少测试成本,提高测试效率,可以只对部分卷积层 进行测试,例如对一个卷积层进行测试,对部分下采样层进行测试,例如对一个下采样层进 行测试,并对部分全连接层进行测试,例如对一个全连接层进行测试。例如,可以控制随机 确定的CNN中的部分卷积层、部分下采样层和部分全连接层分别作为待测试层。较为优选 的,可以确定最后一个卷积层、最后一个下采样层以及连接于最后一个下采样层的全连接 层分别作为待测试层进行测试。
[0092] 在上述测试过程中,针对待测试层的不同,初始矩阵的实现会有所不同。在按照 CNN中卷积层、下采样层和全连接层之间的连接顺序,依次将CNN中的所有卷积层、下采样 层和全连接层分别作为待测试层的情况下:
[0093] 若待测试层是CNN中的首个卷积层,则初始矩阵具体是由图像的原始特征构成的 feature Map 矩阵。
[0094] 若待测试层是CNN中非首个卷积层,则初始矩阵是与该卷积层连接的上一下采样 层输出的feature Map矩阵,该feature Map矩阵优选为上一下采样层输出的参考结果矩 阵;这样在确定实现上一下采样层功能的代码的逻辑正确后,可以控制CNN代码继续运行 实现卷积层功能的代码,有利于提高测试效率。
[0095] 若待测试层是下采样层,则初始矩阵是与该下采样层连接的上一卷积层输出的 feature Map矩阵,该feature Map矩阵优选为上一卷积层输出的参考结果矩阵;这样在确 定实现上一卷积层功能的代码的逻辑正确后,可以控制CNN代码继续运行实现下采样层功 能的代码,有利于提高测试效率。
[0096] 其中,若待测试层是全连接层,则初始矩阵为权重矩阵。
[0097] 图6为本发明一实施例提供的CNN代码测试方法的流程示意图。如图6所示,该 方法包括:
[0098] 601、控制CNN代码实现的CNN中的卷积层、下采样层和全连接层分别作为待测试 层。
[0099] 602、以初始矩阵作为CNN代码中实现待测试层功能的代码段的输入,控制代码段 运行,以获取代码段输出的初始结果矩阵。
[0100] 603a、当待测试层为卷积层或全连接层时,按照预设的测试次数,每次改变初始矩 阵中的元素值,以获得参考矩阵,并以参考矩阵作为代码段的输入,重新控制代码段运行, 以获取代码段输出的参考结果矩阵,判断参考结果矩阵中和初始结果矩阵中对
当前第3页1 2 3 4 5 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1