游戏电视苹果数码历史美丽
投稿投诉
美丽时装
彩妆资讯
历史明星
乐活安卓
数码常识
驾车健康
苹果问答
网络发型
电视车载
室内电影
游戏科学
音乐整形

动手学深度学习框架(4)手把手教你写一个功能完整的简易Dem

  0、前言
  一定不要错过!一定不要错过!一定不要错过!重要的事情说3遍。本篇文章中,我将手把手教你写一个功能完整的深度学习框架demo,本文将满足你对Pytorch、Tensorflow、Paddle中神秘的C后端的所有好奇心。1、问题描述
  为了在有限的篇幅中把深度学习框架讲明白,我们以一个简单的例子开始:
  组网结构:超级简单的FC(全连接),Loss(损失函数)采用MSE(最小均方误差)
  为了进一步简化,输入输出张量纬度均设为1,也就是全为标量
  上式中,是输入数据,是模型输出,是参数。
  给定一条训练样本2、数学推导
  上述公式中的就是神经网络中的loss,则该最优化问题可抽象为:
  如何求解呢?3板斧:反向梯度链式求导梯度更新
  3、详细代码及解释includeiostreamincludeiomanipincludestringincludeunorderedmapincluderandomincludechronoinclude自定义Tensor类型,这里数据成员非常简单,就是个标量,重载了基本数学运算符classMyTensor{public:uint32tdata;public:MyTensor(){};MyTensor(uint32tx):data(x){}MyTensoroperator(constMyTensora){thisdatathisdataa。data;returnthis;}MyTensoroperator(constMyTensora){thisdatathisdataa。data;returnthis;}MyTensoroperator(constMyTensora){thisdatathisdataa。data;returnthis;}MyTensoroperator(constinta){thisdatathisdataa;returnthis;}};Op基类classOpBase{public:std::unorderedmapstd::string,MyTensorinputs;std::unorderedmapstd::string,MyTensoroutputs;std::unorderedmapstd::string,MyTensorlabels;public:virtualvoidRun()0;};乘法前向OpclassMultipylyForward:publicOpBase{public:voidRun(){MyTensorxinputs〔X〕;MyTensorwinputs〔W〕;MyTensory1xw;outputs〔Y〕y1;}};乘法反向OpclassMultipylyBackward:publicOpBase{public:voidRun(){MyTensorxinputs〔X〕;outputs〔Y〕x;}};加法前向OpclassAddForward:publicOpBase{public:voidRun(){MyTensorx1inputs〔X1〕;MyTensorx2inputs〔X2〕;MyTensoryx1x2;outputs〔Y〕y;}};加法反向OpclassAddBackward:publicOpBase{public:voidRun(){MyTensorx;x。data1;outputs〔Y〕x;}};loss前向Op,这里选取MSE作为示例classLossForward:publicOpBase{public:voidRun(){MyTensoryinputs〔X〕;MyTensorlabellabels〔Label〕;MyTensorloss(ylabel)(ylabel);outputs〔Y〕loss;}};loss反向OpclassLossBackward:publicOpBase{public:voidRun(){MyTensoryinputs〔X〕;MyTensorlabellabels〔Label〕;outputs〔Y〕(ylabel)(ylabel);}};梯度更新OpclassUpdateGrad:publicOpBase{public:doublelr0。1;std::unorderedmapstd::string,MyTensorinputs;std::unorderedmapstd::string,MyTensoroutputs;public:voidRun(){MyTensorwinputs〔W〕;MyTensorgradinputs〔Grad1〕inputs〔Grad2〕inputs〔Grad3〕;链式求导MyTensorlr;lr。datathislr;outputs〔Y〕wlrgrad;}};intmain(){1。用户自定义前向组网std::vectorstd::stringprogram{Multiply,Add,Loss};2。框架生成前向op自动补全反向OP插入梯度更新opstd::vectorstd::stringops{multiplyforward,addforward,lossforward,lossbackward,Addforward,multiplybackward,updategrad};3。实例化c端op对象std::vectorOpBaseopClass{newMultipylyForward(),newAddForward(),newLossForward(),newLossBackward(),newAddBackward(),newMultipylyBackward(),newUpdateGrad()};4。框架根据用户组网,自动给每个op的输入赋值,这里仅以乘法前向op作个例子。一定要记住一点:框架中所有输入数据、参数、模型中间输入、输出、以及每个参数的梯度都有一个string类型的名字,它的存在是为了给op输入赋值服务的opClass〔0〕inputs〔X〕MyTensor(10);opClass〔0〕inputs〔W〕MyTensor(20);for(autoop:opClass){opRun();}5。测试第1个op的输出std::coutopClass〔0〕outputs〔Y〕。data;输出结果:200}3。0、框架实现7个算子(Op)
  Op就可以简单理解为函数符号化,对于每个Op(函数),我们需要指定输入是什么,输出是什么,所以很显然想到用string类型的名字去描述。在Op运行时,只要按名字找到实际的数据即可。
  3。1、用户描述组网信息
  由python前端接口提供,具体可参考本系列专题之前的文章。3。2、框架生成前向Op(3个)框架生成反向Op(3个)框架插入参数更新Op(1个)3。3、框架运行Op4、总结
  当然,本文为了让大家理解神经网络框架的基本原理,所以非常简化。实际框架比这要复杂得多(功能更加完善、训练和推理的区别、静态图和动态图、cpugpu等异构硬件、自动微分、序列化等等),但本质思想上是完全一样的。感兴趣的同学,可以去深入研究下Pytorch、Paddle、Tensorflow的源码吧。
  之后的文章,我将重点介绍下深度学习分布式技术的方方面面,欢迎关注。
  更多内容,也请关注我同名知乎账号自由技艺

美味盐酥豆的做法,简直是经典下酒菜我认为世间唯美食不可辜负,能品尝到的各种无上美味更是人生的一大幸事,因此发现美食、品尝美食、分享美食是我人生的一大乐事。今天我又来和大家分享美食啦!天儿一天比一天热,毛豆……8月20日茅台价格行情今日(8月20日),从网络发布的白酒价格行情监测数据显示,今天飞天散瓶在3080左右。而另一款高端白酒52度五粮液,今日批价在1000左右。建议零售价今日行情……9月1日茅台价格行情今日(9月1日),从网络发布的白酒价格行情监测数据显示,今天飞天散瓶在3000左右。而另一款高端白酒52度五粮液,今日批价在1010左右。建议零售价今日行情名……学会这十二道川菜,开个川菜馆没问题虾吃虾涮制作:每斤虾按7两净虾配,每斤虾配料头300克(大葱100克、长5厘米;西芹100克、长5厘米;蒜米50克;生姜50克、切0。3厘米见方长的条),配自制香辣……卵巢囊肿复发了怎么办?这几个方法可以有效预防卵巢囊肿属于女性常见的良性肿瘤,其主要表现是痛经、月经紊乱、运动后突然站起时小腹部有疼痛感、肚腩突出、尿频或排尿困难。若置之不理,囊肿会越来越大,压迫腹腔,扰乱内分泌,影响女性……纳粹德国的九大黑科技最后一个如果成功,足以毁灭地球!纳粹德国的九大黑科技:最后一个如果成功,足以毁灭地球!1、V3巨炮这不是石油管道,而是纳粹德国在二战期间发明的V3巨炮。据说V3巨炮有1433吨,要500个人合作才……全线跌!9月23日茅台价格行情。今日(9月22日),从网络发布的白酒价格行情监测数据显示,另一款高端白酒52度五粮液,今日批价在1010左右。建议零售价今日行情名称厂价专卖店售价……物流将成为大理千亿级产业!大理州物流产业用地将增至1。1万亩大理州12县市分布图未来13年,大理州重点打造的千亿级产业有哪些?除了享誉海内外的旅游业,另一个产业,可能很多人都未曾预料到,竟然是物流业!现代物流将和文化旅……2022年将会上市的5款重磅手机,每一款都是梦想,值得你苦苦智能手机行业的迭代更新速度频繁,今年还是旗舰机标配的功能,明年可能就会下放到中端手机上,所以在全新的2022年,对于数码爱好者来说绝对是幸福的一年,因为今年将会有5款重磅手机发……跳绳可以使人脂肪下降,但切勿盲目跳绳我们都知道跳绳是最好的减肥运动之一,有数据表明,每天10分钟的跳远,每分钟140次,相当于半小时的慢跑,跳绳不仅可以帮助你减肥和减肥,而且可以保持你的肌肉平衡和力量,同时使你的……日常家居生活中,乙醇的使用注意事项自从疫情之后,家里常备乙醇是各家的习惯,我们在日常生活中也会有用到乙醇消毒的地方但是很多人不知道乙醇的正确用法,认为浓度越高消毒效果就越好,其实不是的,乙醇的浓度在75的才能起……通过气味判断家居甲醛不科学,通风释放别在阳光下暴晒甲醛有害气体是一个很可怕的存在,很多人买家具,直接放置屋中存在侥幸心理,认为一个家居衣柜能有多少的甲醛有害气体?要注意的是,有甲醛不一定有异味,但是有异味就一定会有甲醛哦!……
人到中老年,多喝酒可以活血化瘀?医生提醒不如多做这几件事很多人认为,人到中老年,要少吸烟,但适量喝点酒还是很有好处的。不仅如此,网上也常有喝酒有益于心血管健康、喝酒可以活血化瘀的说法,而且还有不少人认为喝酒是养生的一种方法。那么,这……鸡胸丸子怎么做?鸡胸肉肉质细嫩、营养丰富、味道鲜美,鸡肉消化率高,容易被人体吸收,新鲜的鸡胸肉有弹性,无异味,下面介绍鸡胸肉丸子的做法:配料:鸡胸肉500克、大葱一根、姜25克、花椒10……临汾市尧都区哪家牛肉丸子面好吃正宗?牛肉丸好吃2021072618:56:17导读:牛肉丸栏目模块,提供临汾牛肉丸子面哪里好吃、临汾最好吃正宗牛肉丸子面的相关知识,其中包括临汾最好吃正宗牛肉丸子面在哪,临汾……好物推荐马上出发!清明小长假露营装备都在这里了北京现代好物分享清明小长假倒计时四月莺飞草长,是出门露营的好时光跟家人朋友一起,带上水果、点心,吹吹微风想想就已经迫不及待了你的露营计划想好……自酿白酒怎样勾兑口感好?现在很多朋友都自己在家里酿造白酒,也就是从淘宝上购买一套设备自己酿酒。其实从2012年开始我就接触这一类酒类发烧友,因为很多专家一直在宣传一种观点:自酿酒不健康。因为我个……骁龙870机低至1699元性价比党要的它都有各位早上好,随着7月的正式开始,学生群体们都开始放暑假,换机潮也再次开始。笔者这里要为性价比党们推荐一款仍在打折中的骁龙870机型iQOONeo5SE,立减300元后1699元……什么食物永远不会过期腐败,为什么?根据《食品标识管理规定》第二章第九条明确规定:乙醇含量10以上(含10)的饮料酒、食醋、食用盐、固态食糖类,可以免除标注保质期。1。酒中国有句话酒越陈越香;很多白酒瓶上都……淡季来了,宝鸡这两家景区门票打折啦随着气温越来越低景区票价优惠力度也越来越大真是寒冷冬天的一大慰藉宝鸡法门文化景区和龙门洞森林公园实行优惠具体内容如下1hr法门文化景区……小时候,总觉得邻居家的饭更好吃,有没有??是的。小时候挑食,姥姥就把做好的饭放在邻居家,我每天去人家吃饭,以为是邻居阿姨做的,吃得很香。这种情况发生有两个原因,如下如下:环境的变化刺激了孩子味蕾的分泌,使消……任正非改变主意,华为要上市了?最有可能以哪种方式上市?华为是一家非常了不起的公司,但是华为成立30多年了,却一直没有上市,华为老总任正非的个人财富,与那些资本大佬比起来,也差的很远,在富豪榜排名中比较靠后,这也让很多喜欢华为和敬佩……看好了你圆通速递股票,怎么回事?圆通速递前天跌近6个点,我查了一下黑天鹅事件,什么泄露了几十亿的个人隐私,导致大跌。不影响业绩的,应该是突发情况才跌这么多。技术指标都是超卖布林线跌破了,有个技术超卖,应该有个……新疆的长寿圣果恰玛古,你吃过吗?提起恰玛古,好多人不知道是何物?不但很多内地人不知道,有不少新疆人也不是很了解。从恰玛古的表面看,它长得象萝卜,大的和萝卜差不多大,但是细看一下,长得很难看,上面还有很多疤痕,……
友情链接:易事利快生活快传网聚热点七猫云快好知快百科中准网快好找文好找中准网快软网