发明内容
本发明实施例提供了神经网络模型的可视化建模方法和装置,实现了可视化构建神经网络模型。
神经网络模型的可视化建模方法,为深度学习框架中的各个运算方法与各个对象/实例构建映射关系,并为各个所述对象/实例构建对应的可视化控件,并将输入输出关系映射为可视化有向弧,还包括:
当接收到对至少一个所述可视化控件的操作时,根据操作的每一个所述可视化控件对应的对象/实例以及所述映射关系,确定节点集合;
当接收到对至少一个所述可视化有向弧的操作时,根据操作的每一个所述可视化有向弧和所述输入输出关系,确定依赖关系集合;
当接收到建模请求时,初始化预先构建的源码文件;
基于所述深度学习框架和初始化后的所述源码文件,利用所述节点集合和所述依赖关系集合,生成对应的神经网络模型。
可选地,
所述对至少一个所述可视化控件的操作,包括:将一个可视化控件移入可识别区域,并为移入的所述可视化控件添加可视化参数;或者,将位于可识别区域中的一个可视化控件移出可识别区域,并删除移出的所述可视化控件对应的可视化参数;
所述对至少一个所述可视化有向弧的操作,包括:在所述可视化区域中,任两个可视化控件之间绘制所述可视化有向弧,或者,删除绘制的可视化有向弧。
可选地,上述方法进一步包括:
定义节点集合V,V={vi|vi=(type,params)},其中,vi表征第i个节点;type表征第i个节点对应的运算方法;params表征第i个节点对应的参数;
所述确定节点集合,包括:
针对操作的每一个所述可视化控件执行下述N1至N3:
N1:通过所述映射关系,在所述深度学习框架中,查找操作的所述可视化控件对应的对象/实例的运算方法,并利用操作的所述可视化控件对应的可视化参数与查找到的所述运算方法,将操作的所述可视化控件实例化为一个节点vm=(typem,paramsm),其中,vm表征操作的所述可视化控件实例化的第m个节点,m为不小于1的正整数;typem表征操作的所述可视化控件对应的运算方法;paramsm表征操作的所述可视化控件对应的可视化参数;
N2:当所述操作为将一个可视化控件移入可识别区域,并为移入的所述可视化控件添加可视化参数时,确定当前节点集合Vm=Vm-1∪{vm};
N3:当所述操作为将一个可视化控件移出可识别区域,并删除移出的所述可视化控件对应的可视化参数时,确定当前节点集合Vm-1=Vm-{vm}。
可选地,上述方法进一步包括:
定义有向弧集合E,其中,E={ek|ek=(vp,vq)},ek表征第k个有向弧;ek=(vp,vq)表征vp为第k个有向弧起点连接的节点,vq为第k个有向弧的终点连接的节点,第k个有向弧构建出的依赖关系为第p个节点的输出为第q个节点的输入;
所述确定依赖关系集合,包括:
针对操作的每一个所述可视化有向弧执行下述M1至M4:
M1:解析操作的所述可视化有向弧的起点连接的节点和操作的所述有向弧的终点连接的节点;
M2:利用起点连接的所述节点和终点连接的所述节点,实例化操作的所述可视化有向弧,得到实例化的有向弧em=(va,vb),其中,em表征实例化的第m个有向弧,m为不小于1的正整数;va表征第m个实例化的有向弧的起点连接的节点;vb表征第m个实例化的有向弧的终点连接的节点;
M3:当所述操作为绘制所述可视化有向弧时,确定当前依赖关系集合Em=Em-1∪{em};
M4:当所述操作为删除绘制的可视化有向弧时,确定当前依赖关系集合Em-1=Em-{em}。
可选地,在所述接收到建模请求之后,进一步包括:
确定神经网络模型的有向图G;
G=(V,E),V={v1,...,vg},E={e1,...,es}
其中,g表征节点集合中节点的总个数,g为不小于1的正整数;s表征依赖关系集合中实例化的有向弧总个数,s为不小于0的正整数。
可选地,所述利用所述节点集合和所述依赖关系集合,生成对应的神经网络模型,包括:
循环执行下述D1至D7:
D1:判断当前依赖关系集合是否为空,如果否,则执行D2;如果是,则执行D7;
D2:从所述当前依赖关系集合中,检索出所有无前继的节点;
D3:针对每一个无前继的所述节点,执行:从所述当前依赖关系集合中,检索所有的后继的节点;
D4:为每一个后继的所述节点构建代码段code_snippet:
β_output=β_function(α_output,β_params)
其中,β_function表征节点β的运算方法在深度学习框架中对应的方法名;α_output表征节点α的输出变量,β_params表征β_function对应的参数,β_output为节点β的输出变量;
D5:将每一个后继的所述节点对应的代码段code_snippet顺序添加到所述源码文件尾部;
D6:从所述当前依赖关系集合中,去除与D2和D3相关的依赖关系,成为新的依赖关系集合,并将新的依赖关系集合作为当前依赖关系集合,执行D1;
D7:结束循环,确定添加有代码段code_snippet的源码文件为神经网络模型的代码文件。
可选地,所述可视化控件,包括:图形形状和文字符号。
可选地,所述将输入输出关系映射为可视化有向弧,包括:
将输入输出关系映射成有向线段;
分别定义所述有向线段的起始端连接的模型节点为输入,终止端连接的模型节点为所述输入对应的输出。
神经网络模型的可视化建模装置,包括:映射构建与存储单元、节点集合构建单元、依赖关系集合构建单元以及模型生成单元,其中,
所述映射构建与存储单元,用于为外部的深度学习框架中的各个运算方法与各个对象/实例构建映射关系,并为各个所述对象/实例构建对应的可视化控件,并将输入输出关系映射为可视化有向弧,存储各个映射关系、各个可视化控件以及可视化有向弧;
所述节点集合构建单元,用于当接收到对所述映射构建与存储单元存储的至少一个所述可视化控件的操作时,根据操作的每一个所述可视化控件对应的对象/实例以及所述映射关系,确定节点集合;
所述依赖关系集合构建单元,用于当接收到对至少一个所述映射构建与存储单元存储的所述可视化有向弧的操作时,根据操作的每一个所述可视化有向弧和所述输入输出关系,确定依赖关系集合;
所述模型生成单元,用于当接收到建模请求时,初始化预先构建的源码文件;基于外部的所述深度学习框架和初始化后的所述源码文件,利用所述节点集合构建单元确定的所述节点集合和所述依赖关系集合构建单元确定的所述依赖关系集合,生成对应的神经网络模型。
可选地,所述节点集合构建单元,进一步用于:构建节点集合V,V={vi|vi=(type,params)},其中,vi表征第i个节点;type表征第i个节点对应的运算方法;params表征第i个节点对应的参数;
针对操作的每一次所述可视化控件执行下述N1至N3:
N1:在所述深度学习框架中,通过所述映射关系,查找操作的所述可视化控件对应的对象/实例的运算方法,并利用操作的所述可视化控件对应的可视化参数与查找到的所述运算方法,将操作的所述可视化控件实例化为一个节点vm=(typem,paramsm),其中,vm表征操作的所述可视化控件实例化的第m个节点,m为不小于1的正整数;typem表征操作的所述可视化控件对应的运算方法;paramsm表征操作的所述可视化控件对应的可视化参数;
N2:当所述操作为将一个可视化控件移入可识别区域,并为移入的所述可视化控件添加可视化参数时,确定当前节点集合Vm=Vm-1∪{vm};
N3:当所述操作为将一个可视化控件移出可识别区域,并删除移出的所述可视化控件对应的可视化参数时,确定当前节点集合Vm-1=Vm-{vm};
所述依赖关系集合构建单元,进一步用于构建有向弧集合E,其中,E={ek|ek=(vp,vq)},ek表征第k个有向弧;ek=(vp,vq)表征vp为第k个有向弧起点连接的节点,vq为第k个有向弧的终点连接的节点,第k个有向弧构建出的依赖关系为第p个节点的输出为第q个节点的输入;
针对操作的每一个所述可视化有向弧执行下述M1至M4:
M1:解析操作的所述可视化有向弧的起点连接的节点和操作的所述有向弧的终点连接的节点;
M2:利用起点连接的所述节点和终点连接的所述节点,实例化操作的所述可视化有向弧,得到实例化的有向弧em=(va,vb),其中,em表征实例化的第m个有向弧,m为不小于1的正整数;va表征第m个实例化的有向弧的起点连接的节点;vb表征第m个实例化的有向弧的终点连接的节点;
M3:当所述操作为绘制所述可视化有向弧时,确定当前依赖关系集合Em=Em-1∪{em};
M4:当所述操作为删除绘制的可视化有向弧时,确定当前依赖关系集合Em-1=Em-{em}。
可选地,上述装置进一步包括:有向图构建单元,用于确定神经网络模型的有向图G;
G=(V,E),V={v1,...,vg},E={e1,…,es}
其中,g表征所述节点集合构建单元确定的节点集合中节点的总个数,为不小于1的正整数;s表征所述依赖关系集合构建单元确定的依赖关系集合中实例化的有向弧总个数,s为不小于0的正整数。
可选地,
所述模型生成单元,用于循环执行下述D1至D7:
D1:判断当前依赖关系集合是否为空,如果否,则执行D2;如果是,则执行D7;
D2:从所述当前依赖关系集合中,检索出所有无前继的节点;
D3:针对每一个无前继的所述节点,执行:从所述当前依赖关系集合中,检索所有的后继的节点;
D4:为每一个后继的所述节点构建代码段code_snippet:
β_output=β_function(α_output,β-params)
其中,β_function表征节点β的运算方法在深度学习框架中对应的方法名;α_output表征节点α的输出变量,β_params表征β_function对应的参数,β_output为节点β的输出变量;
D5:将每一个后继的所述节点对应的代码段code_snippet顺序添加到所述源码文件尾部;
D6:从所述当前依赖关系集合中,去除与D2和D3相关的依赖关系,成为新的依赖关系集合,并将新的依赖关系集合作为当前依赖关系集合,执行D1;
D7:结束循环,确定添加有代码段code_snippet的源码文件为神经网络模型的代码文件。
本发明实施例提供了神经网络模型的可视化建模方法和装置,通过为深度学习框架中的各个运算方法与各个对象/实例构建映射关系,并为各个所述对象/实例构建对应的可视化控件,并将输入输出关系映射为可视化有向弧,当接收到对至少一个所述可视化控件的操作时,根据操作的每一个所述可视化控件对应的对象/实例以及所述映射关系,确定节点集合;当接收到对至少一个所述可视化有向弧的操作时,根据操作的每一个所述可视化有向弧和所述输入输出关系,确定依赖关系集合;当接收到建模请求时,初始化预先构建的源码文件;基于所述深度学习框架和初始化后的所述源码文件,利用所述节点集合和所述依赖关系集合,生成对应的神经网络模型,通过操作可视化控件,为神经网络模型构建节点,通过操作可视化有向弧,为神经网络模型构建依赖关系,然后利用节点集合和依赖关系集合,生成对应的神经网络模型,也就是说,整个神经网络的生成过程之需要用户对可视化控件和可视化有向弧进行操作,然后根据用户对可视化控件和可视化有向弧的操作来完成神经网络的构建,实现了对神经网络模型进行可视化构建。
具体实施方式
为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例,基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动的前提下所获得的所有其他实施例,都属于本发明保护的范围。
如图1所示,本发明实施例提供了一种神经网络模型的可视化建模方法,该方法可以包括以下步骤:
步骤101:为深度学习框架中的各个运算方法与各个对象/实例构建映射关系,并为各个所述对象/实例构建对应的可视化控件,并将输入输出关系映射为可视化有向弧;
步骤102:当接收到对至少一个所述可视化控件的操作时,根据操作的每一个所述可视化控件对应的对象/实例以及所述映射关系,确定节点集合;
步骤103:当接收到对至少一个所述可视化有向弧的操作时,根据操作的每一个所述可视化有向弧和所述输入输出关系,确定依赖关系集合;
步骤104:当接收到建模请求时,初始化预先构建的源码文件;
步骤105:基于所述深度学习框架和初始化后的所述源码文件,利用所述节点集合和所述依赖关系集合,生成对应的神经网络模型。
在图1所示的实施例中,通过为深度学习框架中的各个运算方法与各个对象/实例构建映射关系,并为各个所述对象/实例构建对应的可视化控件,并将输入输出关系映射为可视化有向弧,当接收到对至少一个所述可视化控件的操作时,根据操作的每一个所述可视化控件对应的对象/实例以及所述映射关系,确定节点集合;当接收到对至少一个所述可视化有向弧的操作时,根据操作的每一个所述可视化有向弧和所述输入输出关系,确定依赖关系集合;当接收到建模请求时,初始化预先构建的源码文件;基于所述深度学习框架和初始化后的所述源码文件,利用所述节点集合和所述依赖关系集合,生成对应的神经网络模型,通过操作可视化控件,为神经网络模型构建节点,通过操作可视化有向弧,为神经网络模型构建依赖关系,然后利用节点集合和依赖关系集合,生成对应的神经网络模型,也就是说,整个神经网络的生成过程之需要用户对可视化控件和可视化有向弧进行操作,然后根据用户对可视化控件和可视化有向弧的操作来完成神经网络的构建,实现了对神经网络模型进行可视化构建。
其中,所述对至少一个所述可视化控件的操作,包括:将一个可视化控件移入可识别区域,并为移入的所述可视化控件添加可视化参数;或者,将位于可识别区域中的一个可视化控件移出可识别区域,并删除移出的所述可视化控件对应的可视化参数;
例如:可视化构建页面包含有候选区域和画布区域,其中,后台在确定节点集合和确定依赖关系集合的过程,相当于识别画布区域的过程。步骤101构建的各个可视化控件放置于可视化的候选区域,对可视化控件具有两种操作:一种操作即为将候选区域中的一个可视化控件移入画布区域即上述的可视别区域,并通过单击该可视化控件中央位置,以文本框形式为该可视化控件添加可视化参数,例如对于卷积运算方法对应的可视化控件,需要添加的可视化参数包括卷积核大小、个数、移动步长、padding等,各个可视化控件需要添加的可视化参数即为可视化控件对应的运算方法所需参数,在此不再一一列举;第二种操作:将画布区域即上述的可视别区域中的一个可视化控件移出或删除,并删除该可视化控件的可视化参数。
所述对至少一个所述可视化有向弧的操作,包括:在所述可视化区域中,任两个可视化控件之间绘制所述可视化有向弧,或者,删除绘制的可视化有向弧。该过程的一种实施方式:对于具有依赖关系的两个可视化控件,例如可视化控件A对应的对象/实例的输出数据,为可视化控件B对应的对象/实例的输入数据,则以可视化控件A为起点绘制带箭头的线段,该带箭头的线段的肩头端指向可视化控件B;当需要解除可视化控件A与可视化控件B之间的依赖关系时,则删除可视化控件A与可视化控件B之间的带箭头的线段。
在本发明一个实施例中,为了确定节点集合,上述方法进一步包括:定义节点集合V,V={vi|vi=(type,params)},其中,vi表征第i个节点;type表征第i个节点对应的运算方法;params表征第i个节点对应的参数;
则上述步骤102的一种具体实施方式包括:针对操作的每一个所述可视化控件执行下述N1至N3:
N1:在所述深度学习框架中,通过所述映射关系,查找操作的所述可视化控件对应的对象/实例的运算方法,并利用操作的所述可视化控件对应的可视化参数与查找到的所述运算方法,将操作的所述可视化控件实例化为一个节点vm=(typem,paramsm),其中,vm表征操作的所述可视化控件实例化的第m个节点,m为不小于1的正整数;typem表征操作的所述可视化控件对应的运算方法;paramsm表征操作的所述可视化控件对应的可视化参数;
N2:当所述操作为将一个可视化控件移入可识别区域,并为移入的所述可视化控件添加可视化参数时,确定当前节点集合Vm=Vm-1∪{vm};
例如:m=1,则V1=V0∪{v1};m=2,则V2=V1∪{v2}
N3:当所述操作为将一个可视化控件移出可识别区域,并删除移出的所述可视化控件对应的可视化参数时,确定当前节点集合Vm-1=Vm-{vm}。
例如:Vm={v1,v2,v3,vm},则Vm-1即为去掉vm后的集合{v1,v2,v3}。
通过上述过程可知,操作的每一个可视化控件可实例化为一个对应的节点,而每一个实例化的节点对应一个可视化控件,即操作的可视化控件与节点一一对应,可以理解地,当针对可视化区域中或者画布区域中的最后一个可视化控件执行完成上述N2或者N3之后,确定出的当前节点集合即为生成神经网络模型所需的节点集合。
在本发明一个实施例中,上述方法进一步包括:定义有向弧集合E,其中,E={ek|ek=(vp,vq)},ek表征第k个有向弧;ek=(vp,vq)表征vp为第k个有向弧起点连接的节点,vq为第k个有向弧的终点连接的节点,第k个有向弧构建出的依赖关系为第p个节点的输出为第q个节点的输入;
则上述步骤103的一种具体实施方式可包括:针对操作的每一个所述可视化有向弧执行下述M1至M4:
M1:解析操作的所述可视化有向弧的起点连接的节点和操作的所述有向弧的终点连接的节点;
M2:利用起点连接的所述节点和终点连接的所述节点,实例化操作的所述可视化有向弧,得到实例化的有向弧em=(va,vb),其中,em表征实例化的第m个有向弧,m为不小于1的正整数;va表征第m个实例化的有向弧的起点连接的节点;vb表征第m个实例化的有向弧的终点连接的节点;
M3:当所述操作为绘制所述可视化有向弧时,确定当前依赖关系集合Em=Em-1∪{em};
M4:当所述操作为删除绘制的可视化有向弧时,确定当前依赖关系集合Em-1=Em-{em}。
通过上述过程可知,操作的每一个可视化有向弧可实例化为一个对应的有向弧,而每一个实例化的有向弧对应一个可视化有向弧,即操作的可视化有向弧与实例化的有向弧一一对应,可以理解地,当针对可视化区域中或者画布区域中的最后一个实例化的有向弧执行完成上述M3或者M4之后,确定出的当前依赖关系集合即为生成神经网络模型所需的依赖关系集合。
在本发明一个实施例中,在所述接收到建模请求之后,进一步包括:
确定神经网络模型的有向图G;
G=(V,E),V={v1,...,vg},E={e1,...,es}
其中,g表征节点集合中节点的总个数,g为不小于1的正整数;s表征依赖关系集合中实例化的有向弧总个数,s为不小于0的正整数。
在本发明一个实施例中,上述步骤105的具体实施方式可包括:循环执行下述D1至D7:
D1:判断当前依赖关系集合是否为空,如果否,则执行D2;如果是,则执行D7;
D2:从所述当前依赖关系集合中,检索出所有无前继的节点;
D3:针对每一个无前继的所述节点,执行:从所述当前依赖关系集合中,检索所有的后继的节点;
D4:为每一个后继的所述节点构建代码段code_snippet:
β_output=β_function(α_output,β_params)
其中,β_function表征节点β的运算方法在深度学习框架中对应的方法名;α_output表征节点α的输出变量,β_params表征β_function对应的参数,β_output为节点β的输出变量;
D5:将每一个后继的所述节点对应的代码段code_snippet顺序添加到所述源码文件尾部;
D6:从所述当前依赖关系集合中,去除与D2和D3相关的依赖关系,成为新的依赖关系集合,并将新的依赖关系集合作为当前依赖关系集合,执行D1;
D7:结束循环,确定添加有代码段code_snippet的源码文件为神经网络模型的代码文件。
通过上述过程实现为依赖关系集合中的各个依赖关系生成各个代码段code_snippet,并将各个代码段code_snippet添加到源码文件尾部即为神经网络模型的代码文件。上述循环执行D1至D7可通过下述代码实现:
检索出有向图G中所有无前继的节点,记为集合A={α}
forαinA:
检索出α所有的后继,记为集合B_α
B=B∪Bα
end for
forβinB:
构建代码段code_snippet:
β_output=β_function(α_output,β_params)
添加code_snippet到D尾部
E=E-(α,β)
end for
end repeat
输出D。
在本发明一个实施例中,所述可视化控件,包括:图形形状和文字符号。
在本发明一个实施例中,所述将输入输出关系映射为可视化有向弧,包括:
将输入输出关系映射成有向线段;
分别定义所述有向线段的起始端连接的模型节点为输入,终止端连接的模型节点为所述输入对应的输出。
为了能够清楚地说明神经网络模型的可视化建模方法,下面基于图3给出的可视化控件以及候选区域和画布区域,构建如图4所示的可视化有向图及对应的神经网络模型为例,展开说明神经网络模型的可视化建模方法,如图2所示,该方法可包括如下步骤:
步骤200:为深度学习框架中的各个运算方法与各个对象/实例构建映射关系,并为各个所述对象/实例构建对应的可视化控件,并将输入输出关系映射为可视化有向弧;
该可视化控件可通过图形形状+文字符号来表示,比如卷积运算方法的可视化控件表现方式为圆圈内包含有文字符号conv2d,最大池化运算方法的可视化控件表现方式为矩形内包含有文字符号maxpool等等。
步骤201:定义节点集合和有向弧集合,构建源码文件;
该步骤定义的节点集合V={vi|vi=(type,params)},其中,vi表征第i个节点;type表征第i个节点对应的运算方法;params表征第i个节点对应的参数;
该步骤定义的有向弧集合E={ek|ek=(vp,vq)},ek表征第k个有向弧;ek=(vp,vq)表征vp为第k个有向弧起点连接的节点,vq为第k个有向弧的终点连接的节点,第k个有向弧构建出的依赖关系为第p个节点的输出为第q个节点的输入。
步骤202:初始化节点集合和有向弧集合;
该步骤的初始化即为确定初始的节点集合
初始的有向弧集合
步骤203:实时检测画布区域是否移入新的可视化控件,如果是,则执行步骤204;否则,执行步骤207;
步骤204:将新的可视化控件作为当前可视化控件,获取外部输入的当前可视化控件的可视化参数;
步骤205:通过映射关系,在深度学习框架中,查找该当前可视化控件对应的对象/实例的运算方法;
步骤206:利用该当前可视化控件对应的可视化参数与查找到的所述运算方法,将该当前可视化控件实例化为一个节点,并将该节点添加到上一个节点集合,成为当前节点集合,并执行步骤203;
上述步骤204至步骤206的实现过程,如图3给出的可视化控件以及候选区域和画布区域,可通过鼠标拖动候选区域中的一个可视化控件到画布区域来完成上述将一个可视化控件移入画布区域;为移入画布区域的该可视化控件添加可视化参数的方式为,通过单击画布区域的可视化控件中央位置,出现文本框,通过在文本框中输入参数,即实现为移入画布区域的该可视化控件添加可视化参数。
将该可视化控件实例化为一个节点,并将该节点添加到上一个节点集合,成为当前节点集合的具体实施方式包括:该可视化控件实例化为一个节点vm=(typem,paramsm),其中,vm表征操作的所述可视化控件实例化的第m个节点,m为不小于1的正整数;typem表征操作的所述可视化控件对应的运算方法;paramsm表征操作的所述可视化控件对应的可视化参数;则当前节点集合Vm=Vm-1∪{vm};例如:m=1,则V1=V0∪{v1};m=2,则V2=V1U{v2}。
步骤207:实时检测画布区域是否移出/删除可视化控件,如果是,则执行步骤208,否则,执行步骤211;
步骤208:将移出/删除可视化控件作为当前可视化控件,删除当前可视化控件的可视化参数;
步骤209:通过映射关系,在深度学习框架中,查找该当前可视化控件对应的对象/实例的运算方法;
步骤210:利用该当前可视化控件对应的可视化参数与查找到的所述运算方法,将该当前可视化控件实例化为一个节点,并将该节点从上一个节点集合中删除,成为当前节点集合,并执行步骤207;
例如:该步骤实例化的节点为vm,则当前节点集合Vm-1=Vm-{vm};
可以理解地,步骤203至步骤206是基于移入画布区域的可视化控件构建节点集合,步骤207至步骤210是基于删除/移出画布区域的可视化控件构建构建节点集合,在实际构建神经网络模型过程中,可以没有步骤207至步骤210;同时步骤203至步骤206与步骤207至步骤210之间没有严格的先后顺序,该实施例仅给出一种实现方式。另外,步骤203至步骤206中的当前可视化控件与步骤207至步骤210中的当前可视化控件之间没有关联性,可为不同的可视化控件。
步骤211:实时检测画布区域是否绘制新的可视化有向弧,如果是,则执行步骤212;否则,执行步骤214;
步骤212:将新的可视化有向弧作为当前可视化有向弧,获取在画布区域绘制的当前可视化有向弧;
可视化有向弧的绘制方式可为绘制有向线段即为,其中,有向线段起点对应的节点的输出数据,为有向线段终点对应的节点的输入数据;例如:一个有向线段连接可视化控件A和可视化控件B,可视化控件A位于有向线段的起点,可视化控件B位于有向线段的终点,则可视化控件A实例化后的节点的输出数据,为可视化控件B实例化后的节点的输入数据。
步骤213:解析绘制的当前可视化有向弧的起点连接的节点和操作的所述有向弧的终点连接的节点,利用起点连接的节点和终点连接的节点,实例化当前可视化有向弧,得到实例化的当前有向弧,并确定当前依赖关系集合,并执行步骤211;
例如:实例化的当前有向弧为em=(va,vb),其中,em表征实例化的第m个有向弧,m为不小于1的正整数;va表征第m个实例化的有向弧的起点连接的节点;vb表征第m个实例化的有向弧的终点连接的节点;则当前依赖关系集合为Em=Em-1∪{em}。
步骤214:实时检测画布区域是否删除可视化有向弧,如果是,则执行步骤215,否则,执行步骤217;
步骤215:将删除的可视化有向弧作为当前可视化有向弧,获取在画布区域删除的当前可视化有向弧;
步骤216:解析删除的当前可视化有向弧的起点连接的节点和操作的所述有向弧的终点连接的节点,利用起点连接的节点和终点连接的节点,实例化当前可视化有向弧,得到实例化的当前有向弧,并确定当前依赖关系集合,并执行步骤214;
例如:实例化的当前有向弧为em=(va,vb),其中,em表征实例化的第m个有向弧,m为不小于1的正整数;va表征第m个实例化的有向弧的起点连接的节点;vb表征第m个实例化的有向弧的终点连接的节点;则当前依赖关系集合为Em-1=Em-{em}。
可以理解地,步骤211至步骤213是基于绘制的有向弧构建依赖关系集合,步骤214至步骤216是基于删除的有向弧构建依赖关系集合,在实际构建神经网络模型过程中,可以没有步骤214至步骤216;同时步骤211至步骤213与步骤214至步骤216之间没有严格的先后顺序,另外,步骤211至步骤213中的当前可视化有向弧与步骤214至步骤216中的当前可视化有向弧之间没有关联行,可为不同的可视化有向弧。
另外,步骤203至步骤210为构建节点集合的过程,步骤211至步骤216为构建依赖关系集合,因此,步骤203至步骤210与步骤211至步骤216没有严格的先后顺序,本实施例是给出了一种实现方式。
步骤217:当接收到建模请求时,利用当前节点集合和当前依赖关系集合,生成神经网络模型的有向图,并初始化预先构建的源码文件;
该步骤确定出的有向图可为图4所示的有向图。
该步骤确定的神经网络模型的有向图G的表示方式可为:
G=(V,E),V={v1,...,vg},E={e1,...,es}
其中,g表征节点集合中节点的总个数,g为不小于1的正整数;s表征依赖关系集合中实例化的有向弧总个数,s为不小于0的正整数。
步骤218:判断神经网络的有向图对应的当前依赖关系集合是否为空,如果否,则执行步骤219;如果是,则执行步骤222;
例如,图4给出的有向图中,当前依赖关系集合为:
{e1,e2,e3,e4,e5,e6,e7,e8},通过该步骤可知该当前依赖关系集合不为空。
步骤219:从所述当前依赖关系集合中,检索出所有无前继的节点;
例如:针对图4给出的有向图来说,该步骤检索出的无前继的节点为节点1。
步骤220:针对每一个无前继的所述节点,执行:从所述当前依赖关系集合中,检索所有的后继的节点;
例如:针对图4给出的有向图来说,节点1对应的后继节点为节点2,节点2的后继节点为节点3等等。
步骤221:为每一个后继的所述节点构建代码段code_snippet;
代码段code_snippet:
β_output=β-function(α_output,β_params)
其中,β_function表征节点β的运算方法在深度学习框架中对应的方法名;α_output表征节点α的输出变量,β_params表征β_function对应的参数,β_output为节点β的输出变量。
步骤222:将每一个后继的所述节点对应的代码段code_snippet顺序添加到所述源码文件尾部;
步骤223:从所述当前依赖关系集合中,去除与步骤219和步骤220相关的依赖关系,成为新的依赖关系集合,并将新的依赖关系集合作为当前依赖关系集合,执行步骤218;
例如:针对图4给出的有向图来说,当上述步骤220和步骤221完成为依赖关系e1代码段code_snippet,并将构建的代码段code_snippet添加到所述源码文件尾部后,新的依赖关系集合为{e2,e3,e4,e5,e6,e7,e8},{e2,e3,e4,e5,e6,e7,e8}作为当前依赖关系集合,执行步骤218。通过上述循环步骤218至步骤223实现为依赖关系集合中的每一个依赖关系构建代码段code_snippet。
上述步骤218至步骤223可通过下述程序实现:
检索出有向图G中所有无前继的节点,记为集合A={α}
forαinA:
检索出α所有的后继,记为集合B_α
B=B∪Bα
end for
forβinB:
构建代码段code_snippet:
β_output=β_function(α_output,β_params)
添加code_snippet到D尾部
E=E-(α,β)
end for
end repeat
输出D。
其中,β_function为节点β表示的运算方法在深度学习框架中对应的方法名,α_output为节点α的输出变量,β_params为β_function方法的参数,β_output为节点β的输出变量。
步骤224:确定添加有代码段code_snippet的源码文件为神经网络模型的代码文件。
可以理解地,深度学习框架为神经网络模型提供运算方法的接口。
如图5、图6所示,本发明实施例提供了一种神经网络模型的可视化建模装置。装置实施例可以通过软件实现,也可以通过硬件或者软硬件结合的方式实现。从硬件层面而言,如图5所示,为本发明实施例提供的神经网络模型的可视化建模装置所在设备的一种硬件结构图,除了图6所示的处理器、内存、网络接口、以及非易失性存储器之外,实施例中装置所在的设备通常还可以包括其他硬件,如负责处理报文的转发芯片等等。以软件实现为例,如图6所示,作为一个逻辑意义上的装置,是通过其所在设备的CPU将非易失性存储器中对应的计算机程序指令读取到内存中运行形成的。本实施例提供的神经网络模型的可视化建模装置,包括:映射构建与存储单元601、节点集合构建单元602、依赖关系集合构建单元603以及模型生成单元604,其中,
所述映射构建与存储单元601,用于为外部的深度学习框架中的各个运算方法与各个对象/实例构建映射关系,并为各个所述对象/实例构建对应的可视化控件,并将输入输出关系映射为可视化有向弧,存储各个映射关系、各个可视化控件以及可视化有向弧;
所述节点集合构建单元602,用于当接收到对所述映射构建与存储单元601存储的至少一个所述可视化控件的操作时,根据操作的每一个所述可视化控件对应的对象/实例以及所述映射关系,确定节点集合;
所述依赖关系集合构建单元603,用于当接收到对至少一个所述映射构建与存储单元601存储的所述可视化有向弧的操作时,根据操作的每一个所述可视化有向弧和所述输入输出关系,确定依赖关系集合;
所述模型生成单元604,用于当接收到建模请求时,初始化预先构建的源码文件;基于外部的所述深度学习框架和初始化后的所述源码文件,利用所述节点集合构建单元602确定的所述节点集合和所述依赖关系集合构建单元603确定的所述依赖关系集合,生成对应的神经网络模型。
在本发明另一实施例中,
所述节点集合构建单元602,进一步用于:构建节点集合V,V={vi|vi=(type,params)},其中,vi表征第i个节点;type表征第i个节点对应的运算方法;params表征第i个节点对应的参数;
针对操作的每一次所述可视化控件执行下述N1至N3:
N1:在所述深度学习框架中,通过所述映射关系,查找操作的所述可视化控件对应的对象/实例的运算方法,并利用操作的所述可视化控件对应的可视化参数与查找到的所述运算方法,将操作的所述可视化控件实例化为一个节点vm=(typem,paramsm),其中,vm表征操作的所述可视化控件实例化的第m个节点,m为不小于1的正整数;typem表征操作的所述可视化控件对应的运算方法;paramsm表征操作的所述可视化控件对应的可视化参数;
N2:当所述操作为将一个可视化控件移入可识别区域,并为移入的所述可视化控件添加可视化参数时,确定当前节点集合Vm=Vm-1∪{vm};
N3:当所述操作为将一个可视化控件移出可识别区域,并删除移出的所述可视化控件对应的可视化参数时,确定当前节点集合Vm-1=Vm-{vm};
所述依赖关系集合构建单元603,进一步用于构建有向弧集合E,其中,E={ek|ek=(vp,vq)},ek表征第k个有向弧;ek={vp,vq)表征vp为第k个有向弧起点连接的节点,vq为第k个有向弧的终点连接的节点,第k个有向弧构建出的依赖关系为第p个节点的输出为第q个节点的输入;
针对操作的每一个所述可视化有向弧执行下述M1至M4:
M1:解析操作的所述可视化有向弧的起点连接的节点和操作的所述有向弧的终点连接的节点;
M2:利用起点连接的所述节点和终点连接的所述节点,实例化操作的所述可视化有向弧,得到实例化的有向弧em=(va,vb),其中,em表征实例化的第m个有向弧,m为不小于1的正整数;va表征第m个实例化的有向弧的起点连接的节点;vb表征第m个实例化的有向弧的终点连接的节点;
M3:当所述操作为绘制所述可视化有向弧时,确定当前依赖关系集合Em=Em-1∪{em};
M4:当所述操作为删除绘制的可视化有向弧时,确定当前依赖关系集合Em-1=Em-{em}。
在本发明又一实施例中,上述装置进一步包括:有向图构建单元(图中未示出),用于确定神经网络模型的有向图G;
G=(V,E),V={v1,...,vg},E={e1,...,es}
其中,g表征所述节点集合构建单元确定的节点集合中节点的总个数,g为不小于1的正整数;s表征所述依赖关系集合构建单元确定的依赖关系集合中实例化的有向弧总个数,s为不小于0的正整数。
在本发明另一实施例中,所述模型生成单元604,用于循环执行下述D1至D7:
D1:判断当前依赖关系集合是否为空,如果否,则执行D2;如果是,则执行D7;
D2:从所述当前依赖关系集合中,检索出所有无前继的节点;
D3:针对每一个无前继的所述节点,执行:从所述当前依赖关系集合中,检索所有的后继的节点;
D4:为每一个后继的所述节点构建代码段code_snippet:
β_output=β_function(α_output,β_params)
其中,β_function表征节点β的运算方法在深度学习框架中对应的方法名;α_output表征节点α的输出变量,β_params表征β_function对应的参数,β_output为节点β的输出变量;
D5:将每一个后继的所述节点对应的代码段code_snippet顺序添加到所述源码文件尾部;
D6:从所述当前依赖关系集合中,去除与D2和D3相关的依赖关系,成为新的依赖关系集合,并将新的依赖关系集合作为当前依赖关系集合,执行D1;
D7:结束循环,确定添加有代码段code_snippet的源码文件为神经网络模型的代码文件。
上述装置内的各单元之间的信息交互、执行过程等内容,由于与本发明方法实施例基于同一构思,具体内容可参见本发明方法实施例中的叙述,此处不再赘述。
本发明实施例提供了一种可读介质,包括执行指令,当存储控制器的处理器执行所述执行指令时,所述存储控制器执行本发明上述任一实施例提供的方法。
本发明实施例提供了一种存储控制器,包括:处理器、存储器和总线;所述存储器用于存储执行指令,所述处理器与所述存储器通过所述总线连接,当所述存储控制器运行时,所述处理器执行所述存储器存储的所述执行指令,以使所述存储控制器执行本发明上述任一实施例提供的方法。
综上所述,本发明以上各个实施例至少具有如下有益效果:
1、在本发明实施例中,通过为深度学习框架中的各个运算方法与各个对象/实例构建映射关系,并为各个所述对象/实例构建对应的可视化控件,并将输入输出关系映射为可视化有向弧,当接收到对至少一个所述可视化控件的操作时,根据操作的每一个所述可视化控件对应的对象/实例以及所述映射关系,确定节点集合;当接收到对至少一个所述可视化有向弧的操作时,根据操作的每一个所述可视化有向弧和所述输入输出关系,确定依赖关系集合;当接收到建模请求时,初始化预先构建的源码文件;基于所述深度学习框架和初始化后的所述源码文件,利用所述节点集合和所述依赖关系集合,生成对应的神经网络模型,通过操作可视化控件,为神经网络模型构建节点,通过操作可视化有向弧,为神经网络模型构建依赖关系,然后利用节点集合和依赖关系集合,生成对应的神经网络模型,也就是说,整个神经网络的生成过程之需要用户对可视化控件和可视化有向弧进行操作,然后根据用户对可视化控件和可视化有向弧的操作来完成神经网络的构建,实现了对神经网络模型进行可视化构建。
2、在本发明实施例中,在整个建模周期中,用户只需要将不同的可视化控件组合到可视别区域如画布区域,并使用有向弧连接可视化控件建立输入输出关系,来完成神经网络的构建。用户无需学习编程语言和深度学习框架即可建立神经网络模型,从而使神经网络模型构建更加简单。
3、用户可实时通过可视化区域中的可视化控件和可视化有向弧,获悉神经网络模型所需的节点或者依赖关系是否有错误或者缺失,可对错误或缺失进行及时的补救,从而提高了神经网络模型构建的准确率。
4、在本发明实施例中,用户只需要将不同的可视化控件组合到可视别区域如画布区域,并使用有向弧连接可视化控件建立输入输出关系,来完成神经网络的构建,与编写神经网络模型代码相比,本发明实施例提供的构建神经网络模型的方案,能够大大的提高神经网络模型构建的效率。
需要说明的是,在本文中,诸如第一和第二之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个······”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同因素。
本领域普通技术人员可以理解:实现上述方法实施例的全部或部分步骤可以通过程序指令相关的硬件来完成,前述的程序可以存储在计算机可读取的存储介质中,该程序在执行时,执行包括上述方法实施例的步骤;而前述的存储介质包括:ROM、RAM、磁碟或者光盘等各种可以存储程序代码的介质中。
最后需要说明的是:以上所述仅为本发明的较佳实施例,仅用于说明本发明的技术方案,并非用于限定本发明的保护范围。凡在本发明的精神和原则之内所做的任何修改、等同替换、改进等,均包含在本发明的保护范围内。