基于深度学习预测部分的跨平台实现架构及方法与流程

文档序号:14940686发布日期:2018-07-13 20:39阅读:115来源:国知局

本发明涉及机器学习的技术领域,尤其涉及基于深度学习预测部分的跨平台实现架构及方法。



背景技术:

机器学习作为一门多领域交叉学科,是人工智能的核心研究领域。而深度学习是机器学习的关键性技术,其越来越受到各国研究人员的关注和重视。

机器学习和深度学习领域有很多的开发框架,例如tensorflow、caffe、theano。其中,tensorflow是迄今为止应用最广泛、具有优异表现的深度学习开发框架。谷歌公司在2015年开源了tensorflow的首个版本;而且tensorflow目前在深度学习开发框架中世界排名第一。

但是,目前深度学习开发框架更多是侧重于云计算和在线预测,对于端侧设备本地直接预测的场景都还有很大完善空间。另外,从用户端速度体验、离线预测方案需求、以及端侧设备计算资源充分利用等角度来看,对深度学习的预测部分进行跨平台、轻量级的实现是必要的,而且将会极大地提高深度学习预测部分的产品化效率。

以tensorflow为例,在跨平台预测的实现上,仍存在很多需要完善的方面,具体包括:

(1)tensorflow接口不统一。对于不同平台,提供的实现方案不同;对于不同的编程语言,支持的接口各异,导致用户学习成本上升;不同端侧实现相同业务的代码迥异,开发和维护管理成本高,质量控制困难。

(2)tensorflow应用层接口封装方式不够统一、变化较快,甚至造成部分业务在某些平台上无法实现。

(3)tensorflow官方发布支持平台种类有限。例如官方没有宣称负责支持维护嵌入式设备。在移动端、嵌入式系统等端侧设备的高效率移植、功能的实现、性能调优方面均有待完善。

(4)tensorflow框架内核体量较大、使用应用层接口无法深入。由于抢占云计算研发入口的战略等因素,tensorflow整体倾向于云计算、在线预测。内核体量较大,包含了训练和预测两部分的代码。多数开发者仅工作在应用层,无法深入tensorflow底层进行裁剪。



技术实现要素:

本发明主要目的在于提供一种基于深度学习预测部分的跨平台实现架构及方法,旨在完善深度学习开发框架基于深度学习预测部分的跨平台实现,从而提高深度学习预测部分的产品化效率。

为实现上述目的,本发明提供的一种基于深度学习预测部分的跨平台实现架构,所述架构包括基础层、接口层和开发层;其中,

所述基础层包括集成操作内核、跨平台编译环境、预测代码裁剪配置和人工神经网络;所述基础层用于封装出深度学习预测部分统一接口;

所述接口层包括所述深度学习预测部分统一接口及接口转换工具;其中,所述接口转换工具用于将所述深度学习预测部分统一接口转换成预设目标接口;

所述开发层包括开发端,用于连接所述接口层,并调用与开发端支持接口类型对应的适用接口,以实现深度学习预测部分的跨平台移植;

其中,所述适用接口为所述深度学习预测部分统一接口或者所述预设目标接口。

优选地,所述集成操作内核为tensorflow框架内核。

优选地,所述深度学习预测部分统一接口为c++接口,用于连接支持所述c++接口的开发端的连接,以供支持所述c++接口的开发端进行调用;

所述接口转换工具为swig工具,用于连接不支持所述c++接口的开发端,并将所述c++接口转换成预设目标接口,以供不支持所述c++接口的开发端进行调用。

优选地,所述开发层包括支持所述c++接口的第一类开发端、以及不支持所述c++接口的第二类开发端。

优选地,所述第一类开发端包括:ios、c++server、linux、embeddeddevice。

优选地,所述第二类开发端包括:android、pythonserver、javaserver、rserver、goserver。

此外,为实现上述目的,本发明还提供一种基于深度学习预测部分的跨平台实现方法,应用于如上所述的基于深度学习预测部分的跨平台实现框架,包括如下步骤:

搭建基础层,以封装出深度学习预测部分统一接口;其中,所述基础层包括集成操作内核、跨平台编译环境、预测代码裁剪配置和人工神经网络;

基于所述深度学习预测部分统一接口,搭建接口层;其中,所述接口层包括所述深度学习预测部分统一接口及接口转换工具;所述接口转换工具用于将所述深度学习预测部分统一接口转换成预设目标接口;

当检测到开发端连接所述接口层的请求信号时,确认所述开发端支持的接口类型;

根据所述开发端支持的接口类型,确定对应的适用接口,并实现所述开发端对所述适用接口的调用,以实现深度学习预测部分的跨平台移植;

其中,所述适用接口为所述深度学习预测部分统一接口或者所述预设目标接口。

优选地,所述根据所述开发端支持的接口类型,确定对应的适用接口的步骤,具体包括:

当所述开发端支持的接口类型包括所述深度学习预测部分统一接口的接口类型时,确定所述深度学习预测部分统一接口为所述适用接口;

当所述开发端支持的接口类型不包括所述深度学习预测部分统一接口的接口类型时,通过所述接口转换工具将所述深度学习预测部分统一接口转换成预设目标接口;其中所述开发端支持的接口类型包括所述预设目标接口的接口类型。

优选地,所述集成操作内核为tensorflow框架内核。

优选地,所述深度学习预测部分统一接口为c++接口,用于连接支持所述c++接口的开发端的连接,以供支持所述c++接口的开发端进行调用;

所述接口转换工具为swig工具,用于连接不支持所述c++接口的开发端,并将所述c++接口转换成预设目标接口,以供不支持所述c++接口的开发端进行调用。

优选地,所述开发层包括支持所述c++接口的第一类开发端、以及不支持所述c++接口的第二类开发端;其中,所述第一类开发端包括:ios、c++server、linux、embeddeddevice;所述第二类开发端包括:android、pythonserver、javaserver、rserver、goserver。

本发明提供一种基于深度学习预测部分的跨平台实现架构及方法,对某一深度学习开发框架下在各个开发端上各自实现的纷乱接口进行了剥离,直接使用集成的深度学习开发框架内核,并重新针对业务需求封装出深度学习预测部分统一接口,并结合接口层的接口转换工具的条件性使用,提供适用于不同开发端的相关接口,避免了不同类别开发端重复生成接口,使得不同的开发系统平台、不同编程语言的开发端均可以应用本实施例中的跨平台架构,并实现深度学习的预测功能。同时,通过搭建基础层(包括集成操作内核、跨平台编译环境、预测代码裁剪配置和人工神经网络)与接口层,避免了不同类别开发端重复生成接口、重复定义训练代码等繁琐、重复性操作流程,提高了深度学习预测部分的产品化效率,有助于降低开发系统的维护成本、以及提升软件性能。

附图说明

图1为本发明基于深度学习预测部分的跨平台实现架构的第一实施例框图。

图2为本发明基于深度学习预测部分的跨平台实现架构的第二实施例框图。

图3为本发明基于深度学习预测部分的跨平台实现方法的第一实施例的流程示意图。

本发明目的的实现、功能特点及优点将结合实施例,参照附图做进一步说明。

具体实施方式

应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。

如图1所示,本发明提供一种基于深度学习预测部分的跨平台实现架构,包括基础层10、接口层20和开发层30;其中,

所述基础层10包括集成操作内核110、跨平台编译环境120、预测代码裁剪配置130和人工神经网络140;所述基础层用于封装出深度学习预测部分统一接口;

在本实施例中,集成操作内核110优选为tensorflow框架内核,其原因在于用户可以通过tensorflow框架方便地设计神经网络结构,而无需为追求高效率亲自编写c++或cuda代码。tensorflow的核心代码是通过c++语言进行编写的,从而简化了线上部署的负责度。此外,集成操作内核110还可以使用其他第三方深度学习开发框架内核,例如caffe、theano。其中,caffe全称为convolutionalarchitectureforfastfeatureembedding,即快速特征嵌入的卷积体系结构,是一个被广泛使用的开源深度学习开发框架。theano是一个高性能的符号计算及深度学习库。

跨平台编译环境120至少包括了编译程序和连接程序,具体可通过跨平台地编写makefile文件的方式搭建,还可以通过其他方式搭建。其中,makefile文件用于描述深度学习的预测功能对应的编译、连接等规则。

预测代码裁剪配置130,用于对神经网络的训练代码进行裁剪,并保留实现预测功能的相关代码。神经网络通常包含训练和预测两部分代码。由于本实施例建立了跨平台实现架构,从而使得各开发端可以共用本实施例中的跨平台实现架构的基础层的训练代码,避免了各开发端在每次的深度学习开发时需要重新确定训练代码的无效重复操作,提高了产品化效率。

人工神经网络140,优选为已完成集成训练的人工神经网络。人工神经网络140基于开发层的深度学习预测部分的相关代码,实现人工智能预测部分的功能。

进一步地,所述接口层20包括所述深度学习预测部分统一接口210及接口转换工具220;其中,所述接口转换工具220用于将所述深度学习预测部分统一接口转换成预设目标接口;

所述开发层30包括开发端,用于连接所述接口层,并调用与开发端支持接口类型对应的适用接口,以实现深度学习预测部分的跨平台移植;

其中,所述适用接口为所述深度学习预测部分统一接口210或者所述预设目标接口。即当所述开发端支持的接口类型包括所述深度学习预测部分统一接口的接口类型时,直接调用所述深度学习预测部分统一接口;当所述开发端支持的接口类型不包括所述深度学习预测部分统一接口的接口类型时,通过转换工具将所述深度学习预测部分统一接口转换成适用的预设目标接口并调用之。从而使得各类开发端均能应用本实施例中的架构,实现跨平台的深度学习预测。

在本实施例中,对某一深度学习开发框架下在各个开发端上各自实现的纷乱接口进行了剥离,直接使用集成的深度学习开发框架内核,并重新针对业务需求封装出深度学习预测部分统一接口,并结合接口层的接口转换工具的条件性使用,提供适用于不同开发端的相关接口,避免了不同类别开发端重复生成接口,使得不同的开发系统平台、不同编程语言的开发端均可以应用本实施例中的跨平台架构,并实现深度学习的预测功能。同时,通过搭建基础层(包括集成操作内核、跨平台编译环境、预测代码裁剪配置和人工神经网络)与接口层,避免了不同类别开发端重复生成接口、重复定义训练代码等繁琐、重复性操作流程,提高了深度学习预测部分的产品化效率,有助于降低开发系统的维护成本、以及提升软件性能。

进一步地,如图2所示,基于上述第一实施例,提供第二实施例。第二实施例以集成操作内核110为tensorflow框架内核为例进行说明。

其中,所述深度学习预测部分统一接口为c++接口2210,用于连接支持所述c++接口的开发端的连接,以供支持所述c++接口的开发端进行调用;所述c++接口具体是自定义c++接口,即通过类实现面向对象的c++编程,以及在基类中只给出纯虚函数的声明,然后在派生类中实现纯虚函数的具体定义的方式实现接口。

所述接口转换工具为swig工具2220,用于连接不支持所述c++接口的开发端,并将所述c++接口转换成预设目标接口,以供不支持所述c++接口的开发端进行调用。

此外,所述平台层30包括支持c++接口功能的第一类开发端、以及不支持所述c++接口功能的第二类开发端。需要说明的是,所述第一类开发端、第二类开发端具体包括各类深度学习的开发平台/设备,包括但不限于操作系统平台(如ios操作系统、android操作系统、linux开发系统)、开发服务器平台(如c++server、pythonserver、javaserver、rserver、gosever;其中server为服务器之意,上述五者分别代表使用c++、python、java、r语言、go语言的编程语言实现代码编程和功能开发的服务器端)、嵌入式设备(如embeddeddevice,即嵌入式设备)。

tensorflow框架的核心代码直接提供c++接口2210,因此,平台层30中的支持c++接口的第一类开发端可以通过接口层20中的c++接口调用基础层10封装的深度学习预测统一接口,从而进行深度学习的预测。第一类开发端包括但不限于:ios、c++server、linux、embeddeddevice。

对于不支持c++接口的第二类开发端,则可以连接tensorflow框架自带的swig工具。swig工具,其全称为simplifiedwrapperandinterfacegenerator,即简化的封装器和接口生成器,是一个被广泛使用的开源工具,支持将c/c++代码与任何主流脚本语言相集成。换言之,swig工具可以将上述的c++接口转换成支持与第二类开发端连接的具体目标接口。第二类开发端包括但不限于:android、pythonserver、javaserver、rserver、gosever。

当集成操作内核110使用tensorflow框架内核时,由于c++语言的跨平台兼容能力、以及swig工具具有无偏转换接口的能力,本实施例的基于深度学习预测部分的跨平台实现架构可以实现深度学习预测部分的跨平台移植。此外,本实施例的技术核心思想在于:通过对传统的tensorflow在各个平台上各自实现的纷乱接口进行了剥离,直接使用集成tensorflow框架内核,重新针对业务需求封装出深度学习预测统一接口。

如图3所示,本发明提供一种基于深度学习预测部分的跨平台实现方法的第一实施例,应用于如上所述的基于深度学习预测部分的跨平台实现框架,包括如下步骤:

步骤s10,搭建基础层,以封装出深度学习预测部分统一接口;其中,所述基础层包括集成操作内核、跨平台编译环境、预测代码裁剪配置和人工神经网络;

在本实施例中,集成操作内核优选为tensorflow框架内核,其原因在于用户可以通过tensorflow框架方便地设计神经网络结构,而无需为追求高效率亲自编写c++或cuda代码。tensorflow的核心代码是通过c++语言进行编写的,从而简化了线上部署的负责度。此外,集成操作内核还可以使用其他第三方深度学习开发框架内核,例如caffe、theano。其中,caffe全称为convolutionalarchitectureforfastfeatureembedding,即快速特征嵌入的卷积体系结构,是一个被广泛使用的开源深度学习开发框架。theano是一个高性能的符号计算及深度学习库。

跨平台编译环境至少包括了编译程序和连接程序,具体可通过跨平台地编写makefile文件的方式搭建,还可以通过其他方式搭建。其中,makefile文件用于描述深度学习的预测功能对应的编译、连接等规则。

预测代码裁剪配置130,用于对神经网络的训练代码进行裁剪,并保留实现预测功能的相关代码。神经网络通常包含训练和预测两部分代码。由于本实施例建立了跨平台实现架构,从而使得各开发端可以共用本实施例中的跨平台实现架构的基础层的训练代码,避免了各开发端在每次的深度学习开发时需要重新确定训练代码的无效重复操作,提高了产品化效率。

人工神经网络,优选为已完成集成训练的人工神经网络。人工神经网络基于开发层的深度学习预测部分的相关代码,实现人工智能预测部分的功能。

步骤s20,基于所述深度学习预测部分统一接口,搭建接口层;其中,所述接口层包括所述深度学习预测部分统一接口及接口转换工具;所述接口转换工具用于将所述深度学习预测部分统一接口转换成预设目标接口;

步骤s30,当检测到开发端连接所述接口层的请求信号时,确认所述开发端支持的接口类型;

在开发端上完成代码编程和功能开发之后,开发端向所述接口层发起连接所述接口层的请求信号。

步骤s40,根据所述开发端支持的接口类型,确定对应的适用接口,并实现所述开发端对所述适用接口的调用,以实现深度学习预测部分的跨平台移植;

其中,所述适用接口为所述深度学习预测部分统一接口或者所述预设目标接口。

具体地,所述根据所述开发端支持的接口类型,确定对应的适用接口的步骤,具体包括:

步骤s41,当所述开发端支持的接口类型包括所述深度学习预测部分统一接口的接口类型时,确定所述深度学习预测部分统一接口为所述适用接口;

此时,直接调用所述深度学习预测部分统一接口。

步骤s42,当所述开发端支持的接口类型不包括所述深度学习预测部分统一接口的接口类型时,通过所述接口转换工具将所述深度学习预测部分统一接口转换成预设目标接口;其中所述开发端支持的接口类型包括所述预设目标接口的接口类型。

此时,通过转换工具将所述深度学习预测部分统一接口转换成适用的预设目标接口并调用之。从而使得各类开发端均能应用本实施例中的架构,实现跨平台的深度学习预测。

在本实施例中,对某一深度学习开发框架下在各个开发端上各自实现的纷乱接口进行了剥离,直接使用集成的深度学习开发框架内核,并重新针对业务需求封装出深度学习预测部分统一接口,并结合接口层的接口转换工具的条件性使用,提供适用于不同开发端的相关接口,避免了不同类别开发端重复生成接口,使得不同的开发系统平台、不同编程语言的开发端均可以应用本实施例中的跨平台架构,并实现深度学习的预测功能。同时,通过搭建基础层(包括集成操作内核、跨平台编译环境、预测代码裁剪配置和人工神经网络)与接口层,避免了不同类别开发端重复生成接口、重复定义训练代码等繁琐、重复性操作流程,提高了深度学习预测部分的产品化效率,有助于降低开发系统的维护成本、以及提升软件性能。

进一步地,基于图3所示的基于深度学习预测部分的跨平台实现方法的第一实施例,以集成操作内核110为tensorflow框架内核为例进行说明。

其中,所述深度学习预测部分统一接口为c++接口2210,用于连接支持所述c++接口的开发端的连接,以供支持所述c++接口的开发端进行调用;所述c++接口具体是自定义c++接口,即通过类实现面向对象的c++编程,以及在基类中只给出纯虚函数的声明,然后在派生类中实现纯虚函数的具体定义的方式实现接口。

所述接口转换工具为swig工具2220,用于连接不支持所述c++接口的开发端,并将所述c++接口转换成预设目标接口,以供不支持所述c++接口的开发端进行调用。

此外,所述平台层包括支持c++接口功能的第一类开发端、以及不支持所述c++接口功能的第二类开发端。需要说明的是,所述第一类开发端、第二类开发端具体包括各类深度学习的开发平台/设备,包括但不限于操作系统平台(如ios操作系统、android操作系统、linux开发系统)、开发服务器平台(如c++server、pythonserver、javaserver、rserver、gosever;其中server为服务器之意,上述五者分别代表使用c++、python、java、r语言、go语言的编程语言实现代码编程和功能开发的服务器端)、嵌入式设备(如embeddeddevice,即嵌入式设备)。

tensorflow框架的核心代码直接提供c++接口,因此,平台层30中的支持c++接口的第一类开发端可以通过接口层20中的c++接口调用基础层10封装的深度学习预测统一接口,从而进行深度学习的预测。第一类开发端包括但不限于:ios、c++server、linux、embeddeddevice。

对于不支持c++接口的第二类开发端,则可以连接tensorflow框架自带的swig工具。swig工具,其全称为simplifiedwrapperandinterfacegenerator,即简化的封装器和接口生成器,是一个被广泛使用的开源工具,支持将c/c++代码与任何主流脚本语言相集成。换言之,swig工具可以将上述的c++接口转换成支持与第二类开发端连接的具体目标接口。第二类开发端包括但不限于:android、pythonserver、javaserver、rserver、gosever。

当集成操作内核使用tensorflow框架内核时,由于c++语言的跨平台兼容能力、以及swig工具具有无偏转换接口的能力,本实施例的基于深度学习预测部分的跨平台实现架构可以实现深度学习预测部分的跨平台移植。此外,本实施例的技术核心思想在于:通过对传统的tensorflow在各个平台上各自实现的纷乱接口进行了剥离,直接使用集成tensorflow框架内核,重新针对业务需求封装出深度学习预测统一接口。

本发明提供的一种基于深度学习预测部分的跨平台实现架构及方法具有如下有益效果:

(1)对tensorflow接口不统一的问题的改进。

通过使用“自定义c++接口”对tensorflow框架内核进行的封装,利用c++的跨平台特性,提供不同操作系统下的统一c++接口。同时通过swig精准的把c++接口对应到各个语言,实现了跨语言。对tensorflow在跨平台跨语言方面进行了精准赋能,使得应用的开发成本、维护成本得到降低,软件质量得到提升。

(2)对tensorflow应用层接口封装方式不够统一、变化较快的问题的改进。

tensorflow框架内核接口一般不会发生过于剧烈的变化;若tensorflow框架内核接口发生过于剧烈的变化,“自定义c++接口”也可以保持不变,这样业务不会跟随tensorflow版本的进化而做修改。上述tensorflow应用层封装带来的问题在本文所述发明框架中,也不存在,因为该框架剥离了tensorflow原本的应用层封装。

(3)对tensorflow官方发布支持平台种类有限的问题的改进。

本文发明框架对tensorflow的改进:只要目标操作系统平台具有c++编译器(几乎不存在不具有c++编译器的操作系统),就可以移植,而且各个平台上、不同语言上的接口都是一致的。

(4)对tensorflow框架内核体量较大、使用应用层接口无法深入等问题的改进。

本发明的框架对tensorflow的改进:基于预设代码裁剪配置130裁剪训练部分的代码,保留预测部分的代码。具体可以使用makefile结构配置实现裁剪。

本实施例中的基于深度学习预测部分的跨平台实现架构及方法实现神经网络预测的本地化、业务化,为真正落地机器学习解决方案提供了具体方法。以tensorflow为例,使用c++接口在其内核之上的直接封装,提升了智能预测软件的开发效率、降低维护成本、以及提升软件性能。

还需要说明的是,在本文中,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者装置不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者装置所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括该要素的过程、方法、物品或者装置中还存在另外的相同要素。

上述本发明实施例序号仅仅为了描述,不代表实施例的优劣。

通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到上述实施例方法可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件,但很多情况下前者是更佳的实施方式。

以上仅为本发明的优选实施例,并非因此限制本发明的专利范围,凡是利用本发明说明书及附图内容所作的等效结构或等效流程变换,或直接或间接运用在其他相关的技术领域,均同理包括在本发明的专利保护范围内。

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