永发信息网

如何从零使用 Keras + TensorFlow 开发一个复杂深度学习模型

答案:1  悬赏:20  手机版
解决时间 2021-03-05 07:28
如何从零使用 Keras + TensorFlow 开发一个复杂深度学习模型
最佳答案
这篇文章介绍的是关于并行深度神经网络的设计。在今年发布的两个机器学习项目中,cxxnet是最精彩的一个。因为它包含了我们团队可以发挥到的机器学习和系统的各个方面的极致:除了前沿的深度学习之外,它的两个独到特点也是让我们在设计实现中最为享受的1)灵活的公式支持和极致的C++模板编程;深度神经网络的实现大致分两类:以python为主的编程效率派和以c++为核心的为代表的追逐性能派。前者支持直接tensor的计算,而后者往往需要给每个神经网络的层和更新公式编写独立的cudakernel。编程效率派认为机器学习程序员应该是写公式来达到代码最大的可读性和易改写性。而很多以C++为核心的代码之所以没有支持非常灵活的张量计算,是因为因为运算符重载和临时空间的分配会带来效率的降低。cxxnet的核心mshadow在这两者之间做了一个平衡。使得我们在不损失效率的前提下可以通过模板编程技术允许开发者编写和matlab/numpy类似的代码,并且在编译时自动成优化的kernel。其背后的expressiontemplate技术是我最喜欢的c++trick之一。非常值得最求效率抽象和优美的同学了解。因为采用了mshadow作为核心,直接导致cxxnet的各种实现可以非常简单可读,编写一份代码就可以在GPU和CPU上面跑。使得其在代码简洁和可扩展上更加容易。2)通用的并行参数共享和更新方案多卡和多机计算一直是大规模机器学习中一个让人兴奋的话题。提到神经网络并行,最让我头疼的是可以选择的方案很多,而都涉及到不同的hack。单机多卡到底是用P2P,还是拷贝到内存,是用stream开始开多线程。分布式到底是用parameterserver,MPI还是自己写一个框架。可以选择的方法很多。设计出一个分布式的代码不难,困难的是如何让并行的接口自然的独立出来,使得其不会影响其它部分的实现。经过不断地考虑,最终我决定采用了mshadow-ps这样一个统一的参数共享接口。简单的说,mshadow-ps是一个GPU的异步parameterserver接口(应该也是目前为止唯一一个,因为GPU线程模型和CPU不同,原有的的ps库并不能直接用于GPU)。异步通信对于神经网络的更新非常重要。在backprop算法中,我们很早就可以获得梯度并且进行梯度同步,而只有到下一次forward到对应层的时候才会需要这个weight。我和limu合作设计了ps风格的三个接口来解决这样的同步问题,Push/PullReq和Pullwait。当获backprop得梯度的时候直接调用push把梯度发送出去,并且调用pullreq请求结果。Push和Pullreq都是异步操作,背后会有单独的线程同时完成数据拷贝同步,以及拷回的操作。而当我们需要weight之前在调用Pullwait来等待可能没有完成的操作。这样简单的三个接口,使得我们可以经过很少的改动就可以设计出多卡和分布式的神经网络来,并且在调用这些接口的时候完全不需要关系同步的实现是什么。值得一提的是,这样的编程模式把多GPU,分布式以及各个通信框架直接结合起来。mshadow-ps支持单机多卡的GPUPS,以及基于parameter-server的分布式PS实现。同样的也可以很容易MPI来支持多机通信。使得一个统一的接口,可以完成从单机多卡到分布式各种后端实现的支持。并且因为高效的异步通信,使得我们可以在alexnet上面达到linearspeedup(注:并行的难度在于计算和通信的时间比,weight少更加复杂的网络反而更加容易线性加速,而alexnet是非常困难的例子)。经过团队里面大家不断地努力,cxxnet的V2终于可以和大家见面了。除了上述介绍的技术亮点之外,还有各种好玩的特性。现在把特点总结如下:1.轻量而齐全的框架:我们尽力维持最小的依赖库实现最多的功能。推荐环境下仅需要CUDA,OpenCV,MKL或BLAS即可编译。2.强大的统一的并行计算接口:基于mshadow-ps的并行计算接口采用了一份代码解决了多GPU,多机的异步同步。同步和计算重叠,在多份测试中均可以得到线性加速比。3.易于扩展的代码结构:cxxnet计算核心由mshadow提供。Mshadow使用户可以编写numpy/matlab风格的代码,但仍具备手动优化cuda代码的灵活性。CPU和GPU共享同一份代码,在编译期间通过模板自动翻译成CUDA/MKL调用。另外一些特性包括:4.CuDNN支持:Nvidia原生卷积支持,可加速计算30%!5.及时更新的最新技术:我们将及时跟进学术界的动态,例如现在已经支持MSRA的ParametricRelu和Google的BatchNormalization6.Caffe模型转换:支持将训练好的Caffe模型直接转化为cxxnet模型(本周内上线!)7.方便的语言接口:在Python中直接进行训练,方便可视化。Matlab也将很快提供我们相信可以通过最简洁清晰的代码来完成高效的C++深度神经网络实现。我们也欢迎对于系统和机器学习有兴趣的同学加入到项目中来
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
【幸福之路】我的幸福之路作文
三年桉树施多少斤肥料
3月份开通的浦发信用卡,额度2500元,扣年费6
云的高度是什么样的?
用生姜擦头发,一天要擦几次才好?
家里无线网突然没网了,怎么办,路由器什么的
蚂蚁进行通讯联络的方式是BA. 声音B. 气味C.
赞美一个女孩很可爱怎么说
北李各庄村村地址在什么地方,想过去办事
30铲车装砖渣后8轮一车多少钱。
红米手机刷机了没有输入法怎么办打不了字
加速度我有个地方不太明白,就是它的负号代表
客服请进,急事!!!!!,请问我昨天晚上7点
索尼a6000按哪个键回看
正宗永武缝纫设备商行永康专卖店在哪里啊,我
推荐资讯
有首英文歌词有一句是星星点灯犯了错求B开头
如何成为一名高级DBA
江西外语外贸职业学院单招好考吗
姚一铭的名字有多少分?
我保存在百度云盘里的电影电视剧 为啥打开都
富贵花开鲜花店地址有知道的么?有点事想过去
以“花”结尾的词语,越多越好,最好是可以吃
从广西桂林到湖南怀化坐车要几个小时
求说唱歌曲 歌词是让我做你的女神 再次走进你
求高手提供正则表达式的宏--emedtior宏.jsee
男朋友他自己一个人承受痛苦,只和我分享喜悦
电脑验光仪上验光时出现ERROR,怎么解决?
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?