一种神经网络的仿真方法和装置转让专利

申请号 : CN201910259884.5

文献号 : CN109740302B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 陈海波

申请人 : 深兰人工智能芯片研究院(江苏)有限公司

摘要 :

本发明公开了一种神经网络的仿真方法和装置,现有用于FPGA的神经网络模型的仿真验证系统,在进行仿真时,无法自动获取待仿真层数据的存储路径,因此无法完成多层连续仿真验证,效率低下的问题。本发明实施例根据预先定义的用于存放隐含层数据的公共路径和当前待仿真层的层标识生成当前待仿真层数据的存放路径,之后根据从生成的存放路径对应的文件中获取的数据进行针对当前层的仿真,隐含层可能包含多层,在进行仿真时,不需要单独设置各隐含层数据的保存路径,通过本发明实施例可以自动生成当前待仿真层数据的存放路径,实现了多层的连续仿真,节省了每层单独建立仿真的时间,简化了仿真操作流程,提高了仿真效率。

权利要求 :

1.一种神经网络的仿真方法,其特征在于,该方法包括:

将用于存放神经网络模型中部分或全部隐含层仿真数据的公共存放路径与当前待仿真的隐含层的层标识进行拼接,生成当前待仿真的隐含层的仿真数据存放路径;

根据从生成的所述数据存放路径对应的文件中获取的数据,进行针对所述当前待仿真的隐含层的仿真;

其中,所述将用于存放神经网络模型中部分或全部隐含层仿真数据的公共存放路径与当前待仿真的隐含层的层标识进行拼接,生成当前待仿真的隐含层的仿真数据存放路径之后,根据从生成的所述数据存放路径对应的文件中获取的数据,进行针对所述当前待仿真的隐含层的仿真之前,还包括:将当前待仿真的隐含层的仿真数据存放到预先建立的所述当前待仿真的隐含层的仿真数据存放路径中,其中,所述仿真数据存放路径是由用于存放隐含层仿真数据的公共存放路径与所述当前待仿真的隐含层的层标识组成的。

2.如权利要求1所述的神经网络的仿真方法,其特征在于,所述将用于存放神经网络模型中部分或全部隐含层仿真数据的公共存放路径与当前待仿真的隐含层的层标识进行拼接,生成当前待仿真的隐含层的仿真数据存放路径之前,还包括:判断已仿真的隐含层的层数是否未超过设定的目标仿真层数目;

如果是,则根据目标仿真层的层标识和仿真顺序确定当前待仿真的隐含层的层标识;

否则,结束仿真。

3.如权利要求1所述的神经网络的仿真方法,其特征在于,所述将用于存放神经网络模型中部分或全部隐含层仿真数据的公共存放路径与当前待仿真的隐含层的层标识进行拼接,生成当前待仿真的隐含层的仿真数据存放路径,包括:将所述当前待仿真的隐含层的层标识对应的整型数据转换为字符型数据;

通过调用动态路径生成函数,将所述公共路径与所述当前待仿真的隐含层的层标识对应的字符型数据拼接生成所述当前待仿真的隐含层的数据存放路径。

4.如权利要求1所述的神经网络的仿真方法,其特征在于,所述根据从生成的所述数据存放路径对应的文件中获取的数据,进行针对所述当前待仿真的隐含层的仿真,包括:将配置参数动态数组中的配置参数、将权重参数动态数组中的权重参数、将偏置参数动态数组中的偏置参数导入仿真模型;

其中,所述配置参数动态数组是根据从所述对应的文件中的配置参数文件中获取的配置参数文件行数生成的;所述权重参数动态数组是根据从所述对应的文件中的权重参数文件中获取的权重参数文件行数生成的;所述偏置参数动态数组是根据从所述对应的文件中的偏置参数中获取的偏置参数文件行数生成的。

5.一种神经网络的仿真装置,其特征在于,该装置包括:

处理器以及存储器,其中,所述存储器存储有程序代码,当所述存储器存储的一个或多个计算机程序被所述处理器执行时,使得所述装置执行下列过程:将用于存放神经网络模型中部分或全部隐含层仿真数据的公共存放路径与当前待仿真的隐含层的层标识进行拼接,生成当前待仿真的隐含层的仿真数据存放路径;

根据从生成的所述数据存放路径对应的文件中获取的数据,进行针对所述当前待仿真的隐含层的仿真;

其中,所述处理器还用于:

将当前待仿真的隐含层的仿真数据存放到预先建立的所述当前待仿真的隐含层的仿真数据存放路径中,其中,所述仿真数据存放路径是由用于存放隐含层仿真数据的公共存放路径与所述当前待仿真的隐含层的层标识组成的。

6.如权利要求5所述的神经网络的仿真装置,其特征在于,所述处理器还用于:判断已仿真的隐含层的层数是否未超过设定的目标仿真层数目;

如果是,则根据目标仿真层的层标识和仿真顺序确定当前待仿真的隐含层的层标识;

否则,结束仿真。

7.如权利要求5所述的神经网络的仿真装置,其特征在于,所述处理器具体用于:将所述当前待仿真的隐含层的层标识对应的整型数据转换为字符型数据;

通过调用动态路径生成函数,将所述公共路径与所述当前待仿真的隐含层的层标识对应的字符型数据拼接生成所述当前待仿真的隐含层的数据存放路径。

8.如权利要求5所述的神经网络的仿真装置,其特征在于,所述处理器具体用于:将配置参数动态数组中的配置参数、将权重参数动态数组中的权重参数、将偏置参数动态数组中的偏置参数导入仿真模型;

其中,所述配置参数动态数组是根据所述对应的文件中的配置参数文件中获取的配置参数文件行数生成的;所述权重参数动态数组是根据从所述对应的文件中的权重参数文件中获取的权重参数文件行数生成的;所述偏置参数动态数组是根据从所述对应的文件中的偏置参数中获取的偏置参数文件行数生成的。

说明书 :

一种神经网络的仿真方法和装置

技术领域

[0001] 本发明涉及电子技术领域,特别涉及一种神经网络的仿真方法和装置。

背景技术

[0002] 近年来,深度学习技术得到了飞速的发展,在解决高级抽象认知问题,例如图像识别、语音识别、自然语言理解、天气预测、基因表达、内容推荐和智能机器人等领域得到了广泛应用,成为学术界和工业界的研究热点。
[0003] 例如,通过GPU(Graphics Processing Unit,图形处理器)中训练好的神经网络模型在个人电脑、工作站、游戏机和一些移动设备(如平板电脑、智能手机等)上进行图像运算处理。
[0004] 通过将计算机中或其他处理器上已训练好的模型移植到芯片上,实现芯片级的集成,以实现更广泛地应用,比如将GPU中的神经网络模型移植到FPGA(Field-Programmable Gate Array,现场可编程门阵列)上,以实现车载等设备的移动便携式安装。比如:FPGA使用的编程语言为Verilog(HDL是一种硬件描述语言),GPU使用的编程语言为Python(一种计算机程序设计语言),由于FPGA使用的编程语言与GPU不同,无法直接将代码移植到FPGA中,需要使用Verilog语言按照Python语言构建的神经网络模型重新编程,因此可能会存在误差,因此需要对FPGA中构建的神经网络模型进行仿真验证,以证明FPGA与GPU中的神经网络模型中各隐含层的输出结果是否完全或近似相同。
[0005] 现有,用于FPGA的神经网络模型的仿真系统,每一隐含层需要单独建立仿真过程,比如,对第一层进行仿真前,需要预先定义第一层仿真所需的数据文件的保存路径,在仿真时,根据该预先定义的保存路径获取数据,进行第一层的仿真;按照仿真顺序,假如下一个待仿真层为第二层,则需要再次单独定义第二层数据文件的保存路径,以从该保存路径中获取第二层仿真所需的数据,以此类推,但是,每一层都需要单独建立仿真过程,耗费时间较长,无法实现连续仿真。
[0006] 综上所述,现有用于FPGA语言的神经网络模型仿真验证系统,进行仿真时,无法自动获取待仿真层数据的存储路径,因此无法完成多层连续仿真验证,效率低下。

发明内容

[0007] 本发明提供一种神经网络的仿真方法和装置,用以解决现有用于FPGA的神经网络模型的仿真验证系统,进行仿真时,无法自动获取数据源存储路径,因此无法完成多层连续仿真验证,效率低下的问题。
[0008] 第一方面,本发明实施例提供的一种神经网络的仿真方法包括:
[0009] 根据用于存放神经网络模型中部分或全部隐含层数据的公共路径与当前待仿真的隐含层的层标识生成当前待仿真的隐含层的数据存放路径;
[0010] 根据从生成的所述数据存放路径对应的文件中获取的数据,进行针对所述当前待仿真的隐含层的仿真。
[0011] 上述方法,根据预先定义的用于存放隐含层数据的公共路径和当前待仿真层的层标识生成当前层数据的存放路径,之后根据生成的存放路径对应的文件中获取的数据进行针对当前层的仿真,隐含层可能包含多层,在进行仿真时,不需要单独设置各隐含层数据的保存路径,通过本发明实施例可以自动生成当前待仿真层数据的存放路径,实现了多层的连续仿真,节省了每层单独建立仿真的时间,简化了仿真操作流程,提高了仿真效率。
[0012] 在一种可选的实施方式中,所述根据用于存放神经网络模型中部分或全部待仿真的隐含层数据的公共路径与当前待仿真的隐含层的层标识生成当前待仿真的隐含层的数据存放路径之前,还包括:
[0013] 判断已仿真的隐含层的层数是否未超过设定的目标仿真层数目;
[0014] 如果是,则根据目标仿真层的层标识和仿真顺序确定当前待仿真的隐含层的层标识;
[0015] 否则,结束仿真。
[0016] 上述方法,通过判断若存在待仿真的目标层,则根据上述方式生成该隐含层数据的存放路径,否则确定目标仿真层已仿真完成,退出仿真。避免浪费生成数据的存放路径的时间,提高仿真效率。
[0017] 在一种可选的实施方式中,所述根据用于存放神经网络模型中部分或全部待仿真的隐含层数据的公共路径与当前待仿真的隐含层的层标识生成当前待仿真的隐含层的数据存放路径,包括:
[0018] 将所述当前待仿真的隐含层的层标识对应的整型数据转换为字符型数据;
[0019] 通过调用动态路径生成函数,将所述公共路径与所述当前待仿真的隐含层的层标识对应的字符型数据拼接生成所述当前待仿真的隐含层的数据存放路径。
[0020] 上述方法,隐含层可能包含多层,在进行仿真时,不需要单独设置各隐含层数据的保存路径,可以自动生成当前待仿真层数据的存放路径,实现了多层的连续仿真,简化了仿真操作流程,提高了仿真效率。
[0021] 在一种可选的实施方式中,所述根据从所述当前待仿真的隐含层的数据存放路径对应的文件中获取的数据进行针对所述当前待仿真的隐含层的仿真,包括:
[0022] 将配置参数动态数组中的配置参数、将权重参数动态数组中的权重参数、将偏置参数动态数组中的偏置参数导入仿真模型;
[0023] 其中,所述配置参数动态数组是根据所述对应的文件中的配置参数文件中获取的配置参数文件行数生成的;所述权重参数动态数组是根据从所述对应的文件中的权重参数文件中获取的权重参数文件行数生成的;所述偏置参数动态数组是根据从所述对应的文件中的偏置参数中获取的偏置参数文件行数生成的。
[0024] 上述方法,根据生成当前待仿真层数据的存放路径对应的文件获取用于仿真的数据,实现当前待仿真层配置参数、权重参数和偏置参数的自动导入,节省了人工手动配置上述参数的时间,简化了仿真操作流程,提高了仿真效率。
[0025] 在一种可选的实施方式中,所述根据用于存放神经网络模型中部分或全部隐含层数据的公共路径与当前待仿真的隐含层的层标识生成当前待仿真的隐含层的数据存放路径之后,根据从生成的所述数据存放路径对应的文件中获取的数据,进行针对所述当前待仿真的隐含层的仿真之前,还包括:
[0026] 将当前待仿真的隐含层的仿真数据存放到所述当前待仿真的隐含层的仿真数据存放路径中,其中所述当前待仿真的隐含层的仿真数据存放路径是根据预设的用于存放隐含层仿真数据的公共存放路径与所述当前待仿真的隐含层的层标识确定的。
[0027] 第二方面,本发明实施例还提供了一种用于FPGA的神经网络仿真的装置,该装置包括:处理器以及存储器,其中,所述存储器存储有程序代码,当所述存储器存储的一个或多个计算机程序被所述处理器执行时,使得所述终端执行下列过程:
[0028] 根据用于存放神经网络模型中部分或全部隐含层数据的公共路径与当前待仿真的隐含层的层标识生成当前待仿真的隐含层的数据存放路径;
[0029] 根据从生成的所述数据存放路径对应的文件中获取的数据,进行针对所述当前待仿真的隐含层的仿真。
[0030] 在一种可能的实现方式中,所述处理器还用于:
[0031] 判断已仿真的隐含层的层数是否未超过设定的目标仿真层数目;
[0032] 如果是,则根据目标仿真层的层标识和仿真顺序确定当前待仿真的隐含层的层标识;
[0033] 否则,结束仿真。
[0034] 在一种可能的实现方式中,所述处理器具体用于:
[0035] 将所述当前待仿真的隐含层的层标识对应的整型数据转换为字符型数据;
[0036] 通过调用动态路径生成函数,将所述公共路径与所述当前待仿真的隐含层的层标识对应的字符型数据拼接生成所述当前待仿真的隐含层的数据存放路径。
[0037] 在一种可能的实现方式中,所述处理器具体用于:
[0038] 将配置参数动态数组中的配置参数、将权重参数动态数组中的权重参数、将偏置参数动态数组中的偏置参数导入仿真模型;
[0039] 其中,所述配置参数动态数组是根据所述对应的文件中的配置参数文件中获取的配置参数文件行数生成的;所述权重参数动态数组是根据从所述对应的文件中的权重参数文件中获取的权重参数文件行数生成的;所述偏置参数动态数组是根据从所述对应的文件中的偏置参数中获取的偏置参数文件行数生成的。
[0040] 在一种可能的实现方式中,所述处理器还用于:
[0041] 将当前待仿真的隐含层的仿真数据存放到所述当前待仿真的隐含层的仿真数据存放路径中,其中所述当前待仿真的隐含层的仿真数据存放路径是根据预设的用于存放隐含层仿真数据的公共存放路径与所述当前待仿真的隐含层的层标识确定的。
[0042] 第三方面,本发明实施例还提供一种用于FPGA的神经网络仿真的装置,该装置包括:
[0043] 生成模块:用于根据用于存放神经网络模型中部分或全部隐含层数据的公共路径与当前待仿真的隐含层的层标识生成当前待仿真的隐含层的数据存放路径;
[0044] 仿真模块:用于根据从生成的所述数据存放路径对应的文件中获取的数据,进行针对所述当前待仿真的隐含层的仿真。
[0045] 第四方面,本发明实施例还提供一种计算机存储介质,其上存储有计算机程序,该计算机程序被处理器执行时实现第一方面所述方法的步骤。
[0046] 另外,第二方面至第四方面中任一种实现方式所带来的技术效果可参见第一方面中不同实现方式所带来的技术效果,此处不再赘述。
[0047] 本发明的这些方面或其他方面在以下实施例的描述中会更加简明易懂。

附图说明

[0048] 为了更清楚地说明本发明实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简要介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域的普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
[0049] 图1为本发明实施例提供的一种用于FPGA的神经网络仿真的方法示意图;
[0050] 图2为本发明实施例提供的一种神经网络模型的结构示意图;
[0051] 图3为本发明实施例提供的一种建立各隐含层数据文件的示意图;
[0052] 图4为本发明实施例提供的一种用于FPGA的神经网络仿真的完整方法流程示意图;
[0053] 图5为本发明实施例第一种用于FPGA的神经网络仿真的装置的结构示意图;
[0054] 图6为本发明实施例第二种用于FPGA的神经网络仿真的装置的结构示意图。

具体实施方式

[0055] 为了使本发明的目的、技术方案和优点更加清楚,下面将结合附图对本发明作进一步地详细描述,显然,所描述的实施例仅仅是本发明一部份实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其它实施例,都属于本发明保护的范围。
[0056] 下面对文中出现的一些词语进行解释:
[0057] 1、本发明实施例中术语“和/或”,描述关联对象的关联关系,表示可以存在三种关系,例如,A和/或B,可以表示:单独存在A,同时存在A和B,单独存在B这三种情况。字符“/”一般表示前后关联对象是一种“或”的关系。
[0058] 2、本发明实施例中术语“动态数组”的作用是:根据计算机内的数据文件建立可以被基于Verilog构建仿真模型使用的动态数组,建立动态数组的具体操作比如:通过仿真语言,比如Verilog语言的文件读取函数,把计算机内的数据文件读取到动态数组里。
[0059] 下面结合说明书附图对本发明实施例做进一步详细描述。
[0060] 如图1所示,本发明实施例提供的是一种用于FPGA的神经网络仿真的方法,具体包括以下步骤:
[0061] 步骤100:根据用于存放神经网络模型中部分或全部隐含层数据的公共路径与当前待仿真的隐含层的层标识生成当前待仿真的隐含层的数据存放路径;
[0062] 步骤101:根据从生成的所述数据存放路径对应的文件中获取的数据,进行针对所述当前待仿真的隐含层的仿真。
[0063] 通过上述方案,根据预先定义的用于存放隐含层数据的公共路径和当前待仿真层的层标识生成当前层数据的存放路径,之后根据生成的存放路径对应的文件中获取的数据进行针对当前层的仿真,由于隐含层可能包含多层,在进行仿真时,不需要单独设置各隐含层数据的保存路径,在验证FPGA中的神经网络模型时,通过本发明实施例自动生成当前待仿真层数据的存放路径,从生成的存放路径中获取数据,实现了FPGA的多层连续仿真验证,节省了每层单独建立仿真的时间,简化了仿真操作流程,提高了仿真效率。
[0064] 本发明实施例中的神经网络模型包含输入层、隐含层和输出层,隐含层可能包含多层,每一层都具有层标识ID(identification,身份证),如图2所示,为本发明实施例提供的一种神经网络模型的结构示意图,隐含层具有3层数据结构,按照层顺序,层标识分别为ID1,ID2和ID3。
[0065] 本发明实施例的需求在于,GPU中具有已训练好的神经网络模型,由于GPU与FPGA所使用的编程语言不同,无法将GPU中的神经网络模型的程序代码移植到FPGA中,FPGA若想使用GPU中已训练好的神经网络模型,需要使用FPGA的编程语言按照GPU中神经网络模型的学习算法重新编程,构建FPGA中的神经网络模型,因此,需要对FPGA中的神经网络模型中各隐含层进行仿真验证,将各层的仿真数据分别与GPU中对应的隐含层的输出数据进行比对。
[0066] 在使用仿真模型验证FPGA的神经网络模型前,需要对该仿真模型进行预配置,下面分别进行介绍说明:
[0067] 1、定义神经网络模型隐含层的层标识名称,可以按照顺序定义,也可以乱序定义,请结合图2,图2中定义的层标识为顺序定义;
[0068] 2、建立用于存放该神经网络模型中部分或全部隐含层的数据文件,定义该数据文件的公共存放路径BASE_PATH;
[0069] 其中,所述部分或全部隐含层包含目标仿真层。
[0070] 比如,待仿真的隐含层的层标识为ID1,ID2和ID3,建立存放各隐含层数据名称为lay_*的一系列文件夹,其中,*标识层标识ID的阿拉伯数字,如图3所示,在F:/data/:路径下建立lay_1、lay_2和lay_3的文件,定义用于存放待仿真的隐含层数据的公共路径BASE_PATH,即BASE_PATH为F:/data/:。
[0071] 3、定义目标仿真层及仿真顺序;
[0072] 预先设置单层或者多层隐含层的层标识ID作为目标仿真层,例如设置LAY_ID={1,2},即设置lay_1和lay_2作为目标仿真层,仿真顺序为层1,层2,根据目标仿真层和定义的仿真顺序确定当前待仿真层,并可在仿真启动后通过层标识ID修改命令监听线程函数Lay_id_monitor,再次修改仿真列表。
[0073] 其中,定义层标识ID修改命令监听线程函数Lay_id_monitor(int lay_id_new),用于在启动仿真后新增或者删除待仿真的层标识ID。
[0074] 4、生成待仿真层数据的存放路径;
[0075] 调用动态路径生成函数string Path_generator(int lay_id,string BASE_PATH),该函数的作用是根据当前待仿真的层标识ID和用于存放隐含层数据的公共路径BASE_PATH生成当前待仿真层的数据存放路径Current_Path,该函数利用SystemVerilog的string类将输入的int型lay_id,转换为string型的S_lay_id,然后使用string类的拼接特性生成当前待仿真层的数据存放路径Current_Path={ BASE_PATH,S_lay_id}。
[0076] 比如:若用于存放隐含层数据的公共路径BASE_PATH为d:/data/,待仿真层为第一层隐含层,层标识为1,通过SystemVerilog的string类将输入的int型lay_1,转换为string型的S_lay_1,然后使用string类的拼接特性生成第一层隐含层数据的存放路径Current_Path=“d:/data/lay_1”;相应的,第2层隐含层数据的存放路径为Current_Path=“d:/data/lay_2”。
[0077] 5、从生成的待仿真层数据的存放路径中获取用于仿真的数据,建立动态数组;
[0078] 生成动态数组的方式有多种,下面举例说明:
[0079] 生成方式一:根据生成的待仿真层数据的存放路径Current_Path直接生成动态数组;
[0080] 比如,根据当前待仿真层数据的存放路径Current_Path获取配置参数文件,根据配置参数文件行数生成配置参数动态数组,相应的,生成权重参数动态数组和偏置参数动态数组的方式可以参照上述生成配置参数动态数组的方式,此处不再赘述;
[0081] 生成方式二:将当前待仿真层数据的存放路径Current_Path中的文件复制到临时文件中,根据临时文件生成动态数组;
[0082] 比如,根据生成的当前待仿真层数据的存放路径Current_Path,复制该路径下的配置文件到临时文件中,获取临时文件内配置参数文件行数,根据配置参数文件行数生成配置参数动态数组;相应的,生成权重参数动态数组和偏置参数动态数组的方式可以参照上述生成配置参数动态数组的方式,此处不再赘述;
[0083] 将配置参数动态数组中的配置参数导入到仿真模型中;将权重参数动态数组中的权重参数导入到仿真模型中;将偏置参数动态数组中的偏置参数导入到仿真模型中,其中,数据导入没有顺序要求。
[0084] 6、定义存放神经网络模型中各隐含层的仿真数据存放路径,将当前层的仿真数据存放到相应的文件中;
[0085] 其中,对于建立用于保存各隐含层仿真数据的文件的方式举例如下:
[0086] 建立方式一:根据预设的用于存放隐含层仿真数据的公共路径与当前待仿真层的层标识生成当前待仿真层的仿真数据存放路径;
[0087] 比如,预先定义的存放仿真数据的公共路径为F:/data/simulation/,若当前待仿真层的层标识为1,则通过调用路径生成函数生成用于存放该隐含层的仿真数据的路径为F:/data/simulation/lay_1;
[0088] 对于生成当前待仿真层的仿真数据存放路径的方式,具体可以参见生成当前待仿真的隐含层的数据存放路径的具体步骤,重复之处不再赘述。
[0089] 建立方式二:保存在当前待仿真层的数据存放路径下的某文件中;
[0090] 通过上述内容,能够确定当前待仿真层的数据存放路径,将该层的仿真数据存放在当前路径下的Save_file_lay_*.tex文件中;
[0091] 比如,上述举例中,当前待仿真层的层标识为1,当前待仿真层的数据存放路径为Current_Path={ F:/data/lay_1},根据当前层标识1,确定该层的仿真数据保存路径:F:/data/lay_1/Save_file_lay_1.tex。
[0092] 下面以具体实施例,对如何实现FPGA的神经网络模型的连续仿真进行说明:
[0093] 比如,某GPU中的神经网络模型,该神经网络模型的隐含层有3层,层标识分别为ID1,ID2和ID3,在训练过程中,该神经网络模型会对各隐含层的输出结果进行保存,也即如图3所示的文件,可以保存是GPU中的神经网络模型各隐含的输出结果建立的文件,其中,若假如该神经网络模型为图2所示的结构,可以理解的是,第一层的输出数据为第二层的输入数据,第二层的输出数据为第三层的输入数据,以此类推。
[0094] 在进行FPGA仿真时,可以根据GPU的神经网络模型输出的文件手动建立用于存储仿真时的隐含层数据的文件,文件中存储的为仿真时该隐含层输入数据,也可以直接使用GPU的神经网络模型输出的文件。
[0095] 根据上述文件路径,定义用于存放隐含层仿真数据的公共路径,则该公共路径可以是用于存储GPU的神经网络模型的隐含层数据的文件的公共路径,或人工建立用于存放神经网络模型的各隐含层数据的文件的公共路径,比如,采用人工建立的方式,建立如下数据文件:
[0096] 层标识为ID1的隐含层的数据存放路径为F:/data/lay_1;
[0097] 层标识为ID2的隐含层的数据存储路径为F:/data/lay_2;
[0098] 层标识为ID3的隐含层的数据存储路径为F:/data/lay_3。
[0099] 定义的公开路径BASE_PATH应为层1,层2和层3都具有的路径,如图3所示的数据文件,则用于存放该隐含层数据的公共路径BASE_PATH为F:/data/。
[0100] 定义目标仿真层和仿真顺序,例如设置LAY_ID{1,2,3},即目标仿真层为隐含层中层标识为1,2,3的层,仿真顺序为层1,层2,层3,则当前待仿真层为层1,通过调用动态路径生成函数,生成层1的数据存放路径,生成数据存放路径的过程如下:
[0101] 待仿真层的层标识为1,即lay_1,利用SystemVerilog的string类将输入的int(整型)型lay_1转换为string(字符型)数据S_lay_1,然后使用string类的拼接特性,将用于存放隐含层数据的公共路径BASE_PATH(F:/data/)与字符型当前待仿真层的层标识S_lay_1进行拼接得到Current_Path={ BASE_PATH,S_lay_id},生成层1的数据存放路径,即Current_Path={ F:/data/lay_1}。
[0102] 需要说明的是,生成的当前待仿真层的数据存放路径,在启动过程中,实际是利用该路径获取层1的仿真输入数据的,因此,当前待仿真层的数据存放路径也可以理解为当前待仿真层的数据获取路径。
[0103] 可以理解的是,计算机系统内的数据文件要传递给FPGA仿真模型,需要先通过FPGA仿真语言的文件读取函数,把文件读取到动态数组里,然后才能被仿真模型使用。
[0104] 根据生成的当前待仿真层的数据存放路径(该路径对应的文件为计算机内存储的数据文件),获取该路径下的配置参数文件,一种可行的做法是,根据配置参数文件行数生成配置参数动态数组,将配置参数动态数组中的配置参数导入到FPGA仿真模型中,基于相似的操作,将权重参数和偏置参数导入到FPGA仿真模型中,具体方法可参见上述操作,此处不再赘述;
[0105] 另一种可行的做法,根据生成的当前待仿真层的数据存放路径,复制该路径下的配置文件到临时文件中,获取临时文件内配置参数文件行数,根据配置参数文件行数生成配置参数动态数组,再将配置参数动态数组中的配置参数导入到FPGA仿真模型中,基于相似的操作,将权重参数和偏置参数导入到FPGA仿真模型中,具体方法可参数上述操作,此处不再赘述;
[0106] 其中,配置参数包括但不限于神经网络模型的输入规格,输出规格,计算方式等。
[0107] 将配置参数、权重参数和偏置参数导入到FPGA仿真模型后,即可以针对该隐含层启动仿真,仿真过程所产生的数据需要单独保存,并以层作区分,以作为后续与被复制的神经网络模型(比如FPGA复制的为GPU中的神经网络模型,则GPU的神经网络模型为被复制的模型)中该隐含层的输出结果作比对验证。
[0108] 比如,上述举例中,层1的数据存放路径为Current_Path={ F:/data/lay_1},将该层的仿真数据存放在层1的Current_Path下的Save_file_lay_*.tex文档中,其中,*表示层标识的阿拉伯数字,层标识为1,则确定该层的仿真数据保存路径:F:/data/lay_1/Save_file_lay_1.tex。
[0109] 当确定层1仿真结束后,判断是否还有待仿真的目标仿真层,由于目标仿真层还包括层2和层3,按照仿真顺序,继续对层2进行仿真,层2的仿真流程可参见层1仿真流程,生成层2的数据存放路径,层2仿真结束后,执行层3的仿真,具体操作不再赘述。
[0110] 需要说明的是,上述仿真流程为初始仿真设置,即没有修改目标仿真层和仿真顺序的条件下的流程,在仿真过程中,还可以通过命令监听线程函数Lay_id_monitor(int lay_id_new)修改目标仿真层和仿真顺序,比如:新增或删除目标仿真层。
[0111] 如图4所示,本发明实施例进行用于FPGA的神经网络仿真的完整方法包括以下步骤:
[0112] 步骤400:建立神经网络模型部分或全部隐含层数据文件,定义用于存放隐含层数据的公共路径BASE_PATH;
[0113] 步骤401:设置目标仿真层和仿真顺序;
[0114] 步骤402:初始化循环次数loop_num=0;
[0115] 步骤403:刷新目标仿真层数目,判断循环次数loop_num是否符合预设的目标仿真层数目结束条件,假设结束条件为loop_num=目标仿真层数目,若符合,则结束仿真,否则,跳转到步骤404;
[0116] 步骤404:根据BASE_PATH和当前待仿真层的层标识生成当前待仿真层数据的存放路径Current_Path;
[0117] 步骤405:根据当前待仿真层数据的存放路径Current_Path获取配置参数文件、权值参数文件和偏置参数文件,根据配置参数文件行数生成配置参数动态数组,将从配置参数动态数组中获取的配置参数导入到仿真模型中,相应的,参照上述方法将权重参数和偏置参数也导入到仿真模型中;
[0118] 步骤406:根据预设的文件名称Save_file_lay_*.tex,在当前待仿真层的数据存放路径Current_Path下建立当前待仿真层的仿真数据存放文件;
[0119] 步骤407:启动当前层仿真;
[0120] 步骤408:当确定当前层仿真结束后,循环次数loop_num加1,并返回步骤403。
[0121] 需要说明的是,预设的目标仿真层数目结束条件仅为举例,可以根据步骤408中定义的当确定当前层仿真结束后,循环次数loop_num加1或减1来适应性调整,本发明并不限定于此。
[0122] 当启动仿真后,可以通过命令监听线程函数Lay_id_monitor(int lay_id_new)修改目标仿真层和仿真顺序,因此,步骤403需要刷新目标仿真层数目。
[0123] 基于相同的构思,如图5所示,本发明实施例提供一种用于FPGA的神经网络仿真的装置,该装置包括:处理器500以及存储器501,其中,所述存储器501存储有程序代码,当所述存储器501存储的一个或多个计算机程序被所述处理器500执行时,使得所述终端执行下列过程:
[0124] 根据用于存放神经网络模型中部分或全部隐含层数据的公共路径与当前待仿真的隐含层的层标识生成当前待仿真的隐含层的数据存放路径;
[0125] 根据从生成的所述数据存放路径对应的文件中获取的数据,进行针对所述当前待仿真的隐含层的仿真。
[0126] 可选的,所述处理器500还用于:
[0127] 判断已仿真的隐含层的层数是否未超过设定的目标仿真层数目;
[0128] 如果是,则根据目标仿真层的层标识和仿真顺序确定当前待仿真的隐含层的层标识;
[0129] 否则,结束仿真。
[0130] 可选的,所述处理器500具体用于:
[0131] 将所述当前待仿真的隐含层的层标识对应的整型数据转换为字符型数据;
[0132] 通过调用动态路径生成函数,将所述公共路径与所述当前待仿真的隐含层的层标识对应的字符型数据拼接生成所述当前待仿真的隐含层的数据存放路径。
[0133] 可选的,所述处理器500具体用于:
[0134] 将配置参数动态数组中的配置参数、将权重参数动态数组中的权重参数、将偏置参数动态数组中的偏置参数导入仿真模型;
[0135] 其中,所述配置参数动态数组是根据所述对应的文件中的配置参数文件中获取的配置参数文件行数生成的;所述权重参数动态数组是根据从所述对应的文件中的权重参数文件中获取的权重参数文件行数生成的;所述偏置参数动态数组是根据从所述对应的文件中的偏置参数中获取的偏置参数文件行数生成的。
[0136] 可选的,所述处理器500还用于:
[0137] 将当前待仿真的隐含层的仿真数据存放到所述当前待仿真的隐含层的仿真数据存放路径中,其中所述当前待仿真的隐含层的仿真数据存放路径是根据预设的用于存放隐含层仿真数据的公共存放路径与所述当前待仿真的隐含层的层标识确定的。
[0138] 基于相同的构思,如图6所示,为本发明实施例提供的另一种用于FPGA的神经网络仿真的装置结构示意图,该装置包括:
[0139] 生成模块600:用于根据用于存放神经网络模型中部分或全部隐含层数据的公共路径与当前待仿真的隐含层的层标识生成当前待仿真的隐含层的数据存放路径;
[0140] 仿真模块601:用于根据从生成的所述数据存放路径对应的文件中获取的数据,进行针对所述当前待仿真的隐含层的仿真。
[0141] 可选的,所述仿真模块601还用于:
[0142] 判断已仿真的隐含层的层数是否未超过设定的目标仿真层数目;
[0143] 如果是,则根据目标仿真层的层标识和仿真顺序确定当前待仿真的隐含层的层标识;
[0144] 否则,结束仿真。
[0145] 可选的,所述生成模块600具体用于:
[0146] 将所述当前待仿真的隐含层的层标识对应的整型数据转换为字符型数据;
[0147] 通过调用动态路径生成函数,将所述公共路径与所述当前待仿真的隐含层的层标识对应的字符型数据拼接生成所述当前待仿真的隐含层的数据存放路径。
[0148] 可选的,所述仿真模块601具体用于:
[0149] 将配置参数动态数组中的配置参数、将权重参数动态数组中的权重参数、将偏置参数动态数组中的偏置参数导入仿真模型;
[0150] 其中,所述配置参数动态数组是根据所述对应的文件中的配置参数文件中获取的配置参数文件行数生成的;所述权重参数动态数组是根据从所述对应的文件中的权重参数文件中获取的权重参数文件行数生成的;所述偏置参数动态数组是根据从所述对应的文件中的偏置参数中获取的偏置参数文件行数生成的。
[0151] 可选的,所述仿真模块601还用于:
[0152] 将当前待仿真的隐含层的仿真数据存放到所述当前待仿真的隐含层的仿真数据存放路径中,其中所述当前待仿真的隐含层的仿真数据存放路径是根据预设的用于存放隐含层仿真数据的公共存放路径与所述当前待仿真的隐含层的层标识确定的。
[0153] 本发明实施例还提供一种计算机可读非易失性存储介质,包括程序代码,当所述程序代码在计算终端上运行时,所述程序代码用于使所述计算终端执行上述本发明实施例用于FPGA的神经网络仿真的方法的步骤。
[0154] 以上参照示出根据本申请实施例的方法、装置(系统)和/或计算机程序产品的框图和/或流程图描述本申请。应理解,可以通过计算机程序指令来实现框图和/或流程图示图的一个块以及框图和/或流程图示图的块的组合。可以将这些计算机程序指令提供给通用计算机、专用计算机的处理器和/或其它可编程数据处理装置,以产生机器,使得经由计算机处理器和/或其它可编程数据处理装置执行的指令创建用于实现框图和/或流程图块中所指定的功能/动作的方法。
[0155] 相应地,还可以用硬件和/或软件(包括固件、驻留软件、微码等)来实施本申请。更进一步地,本申请可以采取计算机可使用或计算机可读存储介质上的计算机程序产品的形式,其具有在介质中实现的计算机可使用或计算机可读程序代码,以由指令执行系统来使用或结合指令执行系统而使用。在本申请上下文中,计算机可使用或计算机可读介质可以是任意介质,其可以包含、存储、通信、传输、或传送程序,以由指令执行系统、装置或设备使用,或结合指令执行系统、装置或设备使用。
[0156] 显然,本领域的技术人员可以对本发明进行各种改动和变型而不脱离本发明的精神和范围。这样,倘若本发明的这些修改和变型属于本发明权利要求及其等同技术的范围之内,则本发明也意图包含这些改动和变型在内。