首页 >资讯 > > 正文

自制深度学习推理框架-实现我们的第一个算子Relu-第三课-今日热门

2023-01-02 16:28:11
我们的课程主页

https://github.com/zjhellofss/KuiperInfer 欢迎pr和点赞

手把手教大家去写一个深度学习推理框架 B站视频课程


(资料图)

Relu算子的介绍

Relu是一种非线性激活函数,它的特点有运算简单,不会在梯度处出现梯度消失的情况,而且它在一定程度上能够防止深度学习模型在训练中发生的过拟合现象。Relu的公式表达如下所示,「如果对于深度学习基本概念不了解的同学,可以将Relu当作一个公式进行对待,可以不用深究其背后的含义。」

我们今天的任务就是来完成这个公式中的操作,「值得注意的是,在我们的项目中,x和y可以理解为我们在第二、第三节中实现的张量类(tensor).」

Operator类

Operator类就是我们在第一节中说过的计算图中「节点」的概念,计算图的另外一个概念是数据流图,如果同学们忘记了这个概念,可以重新重新翻看第一节课程。

在我们的代码中我们先定义一个「Operator」类,它是一个父类,其余的Operator,包括我们本节要实现的ReluOperator都是其派生类,「Operator中会存放节点相关的参数。」例如在「ConvOperator」中就会存放初始化卷积算子所需要的stride, padding, kernel_size等信息,本节的「ReluOperator」就会带有「thresh」值信息。

我们从下方的代码中来了解Operator类和ReluOperator类,它们是父子关系,Operator是基类,OpType记录Operator的类型。

enumclassOpType{kOperatorUnknown=-1,kOperatorRelu=0,};classOperator{public:OpTypekOpType=OpType::kOperatorUnknown;virtual~Operator()=default;explicitOperator(OpTypeop_type);};

ReluOperator实现:

classReluOperator:publicOperator{public:~ReluOperator()override=default;explicitReluOperator(floatthresh);voidset_thresh(floatthresh);floatget_thresh()const;private:floatthresh_=0.f;};

Layer类

我们会在operator类中存放从「计算图结构文件」得到的信息,例如在ReluOperator中存放的thresh值作为一个参数就是我们从计算图结构文件中得到的,计算图相关的概念我们已经在第一节中讲过。

下一步我们需要根据ReLuOperator类去完成ReluLayer的初始化,「他们的区别在于ReluOperator负责存放从计算图中得到的节点信息,不负责计算」,而ReluLayer则「负责具体的计算操作」,同样,所有的Layer类有一个公共父类Layer. 我们可以从下方的代码中来了解两者的关系。

classLayer{public:explicitLayer(conststd::string&layer_name);virtualvoidForwards(conststd::vector>>&inputs,std::vector>>&outputs);virtual~Layer()=default;private:std::stringlayer_name_;};

其中Layer的Forwards方法是具体的执行函数,负责将输入的inputs中的数据,进行relu运算并存放到对应的outputs中。

classReluLayer:publicLayer{public:~ReluLayer()override=default;explicitReluLayer(conststd::shared_ptr&op);voidForwards(conststd::vector>>&inputs,std::vector>>&outputs)override;private:std::shared_ptrop_;};

这是集成于Layer的ReluLayer类,我们可以看到其中有一个op成员,是一个ReluOperator指针,「这个指针中负责存放ReluLayer计算时所需要用到的一些参数」。此处op_存放的参数比较简单,只有ReluOperator中的thresh参数。

我们再看看是怎么使用ReluOperator去初始化ReluLayer的,先通过统一接口传入Operator类,再转换为对应的ReluOperator指针,最后再通过指针中存放的信息去初始化「op_」.

ReluLayer::ReluLayer(conststd::shared_ptr&op):Layer("Relu"){CHECK(op->kOpType==OpType::kOperatorRelu);ReluOperator*relu_op=dynamic_cast(op.get());CHECK(relu_op!=nullptr);this->op_=std::make_shared(relu_op->get_thresh());}

我们来看一下具体ReluLayer的Forwards过程,它在执行具体的计算,完成Relu函数描述的功能。

voidReluLayer::Forwards(conststd::vector>>&inputs,std::vector>>&outputs){CHECK(this->op_!=nullptr);CHECK(this->op_->kOpType==OpType::kOperatorRelu);constuint32_tbatch_size=inputs.size();for(inti=0;iempty());conststd::shared_ptr>&input_data=inputs.at(i);input_data->data().transform([&](floatvalue){floatthresh=op_->get_thresh();if(value>=thresh){returnvalue;}else{return0.f;}});outputs.push_back(input_data);}}

在for循环中,首先读取输入input_data, 再对input_data使用armadillo自带的transform按照我们给定的thresh过滤其中的元素,如果「value」的值大于thresh则不变,如果小于thresh就返回0.

最后,我们写一个测试函数来验证我们以上的两个类,节点op类,计算层layer类的正确性。先判断Forwards返回的outputs是否已经保存了relu层的输出,输出大小应该assert为1. 随后再进行比对,我们应该知道在thresh等于0的情况下,第一个输出index(0)和第二个输出index(1)应该是0,第三个输出应该是3.f.

TEST(test_layer,forward_relu){usingnamespacekuiper_infer;floatthresh=0.f;std::shared_ptrrelu_op=std::make_shared(thresh);std::shared_ptr>input=std::make_shared>(1,1,3);input->index(0)=-1.f;input->index(1)=-2.f;input->index(2)=3.f;std::vector>>inputs;std::vector>>outputs;inputs.push_back(input);ReluLayerlayer(relu_op);layer.Forwards(inputs,outputs);ASSERT_EQ(outputs.size(),1);for(inti=0;iindex(0),0.f);ASSERT_EQ(outputs.at(i)->index(1),0.f);ASSERT_EQ(outputs.at(i)->index(2),3.f);}}

本期代码仓库位置

gitclonehttps://gitee.com/fssssss/KuiperCourse.gitgitcheckoutfouth

上一篇: 下一篇:
x
推荐阅读

自制深度学习推理框架-实现我们的第一个算子Relu-第三课-今日热门

2023-01-02

白柚树和红柚树区别?|全球热点评

2023-01-02

今日要闻!宿醉之后该怎样养胃?有哪些食疗的方法呢?

2023-01-01

潜江律师费用如何计算

2022-12-31

保利发展(600048.SH)拟定增募资不超125亿元、用于地产项目及补充流动资金

2022-12-30

河北银保监局:推进落实绿色保险业务统计制度

2022-12-30

鸿铭股份上市首日跌5.7% 超募1.4亿经营现金净额连降 今日热门

2022-12-30

2023年北京白塔寺管理处元旦假期开放公告 世界最新

2022-12-30

信达证券股份有限公司 首次公开发行股票投资风险特别公告(第二次) 世界观速讯

2022-12-30

厦门信达(000701.SZ):拟公开挂牌转让苏州工业园区房屋资产

2022-12-29

国家发展改革委:进一步推动5G通信、北斗导航等在现代物流领域应用 实时焦点

2022-12-29

天天通讯!总投资15亿元 常德旅游发展大会柳叶湖又添文旅产业项目

2022-12-29

百事通!华策影视12月28日被深股通减持263.39万股

2022-12-29

永福股份:预中标合计8.71亿元户用光伏电站项目

2022-12-29

极市直播预告丨NeurIPS 2022 Oral-张博航:如何从模型层面获得对抗鲁棒性保证?|天天快看

2022-12-29

播报:新能源汽车专属保险上线一周年 任重而道远

2022-12-28

文旅部:将举办2023新春旅游推广活动 推出多个休闲体验项目-全球资讯

2022-12-28

中央气象台:黄淮江淮江汉江南等地有霾|观点

2022-12-28

山大地纬:融资净偿还154.33万元,融资余额3826.89万元(12-27)

2022-12-28

46岁的李湘,从国内“消失”了

2022-12-27

快播:最大CLIP!LAION发布CLIP的扩增定律

2022-12-27

聚力打造特色制造业强区——专访自贡市大安区科技和经济信息化局局长潘军

2022-12-27

令人兴奋的一年在招手!大多头:2023年黄金将冲破2000美元 白银将翻一番至50美元-全球热点

2022-12-27

环球实时:数字广东开放线上抗原购买 省内居民可预约

2022-12-26

人民艺起评:《天下长河》,聆听中华民族的治水壮歌

2022-12-26

全球观热点:东北制药:公司于2022年12月9日收到辽宁省市场监督管理局下发的《行政处罚告知书》

2022-12-26

观天下!新易贷微贷款借款逾期6个月多久上征信

2022-12-25

“网红减肥药”滥用调查:3分钟开出一份“假处方” 电商渠道销售增119倍

2022-12-24

韵达股份: 关于董事会换届选举的公告

2022-12-23

本周盘点(12.19-12.23):中航产融周跌5.13%,主力资金合计净流出9731.60万元

2022-12-23

同飞股份:12月22日获融资买入276.92万元

2022-12-23

盛洋投资透过美国房地产基金平台出售一项物业 代价4150万美元_全球资讯

2022-12-22

金城医药:目前公司没有相关产品应用于新冠疫苗中

2022-12-22

关注:捷信超贷借款逾期十天多久会上征信

2022-12-22

基于.NetCore开发博客项目 StarBlog - (21) 开始开发RESTFul接口|新动态

2022-12-21

变豆菜能吃吗可以怎么做啊?变豆菜的功效与主治与作用是什么呢?

2022-12-21

利扬芯片: 关于使用暂时闲置自有资金进行现金管理的公告

2022-12-07

阳光电源12月6日获深股通净卖出3.51亿 速看料

2022-12-06

汤臣倍健2021年市占率10.3% 稳居行业第一

2022-05-22

总投资3172.5亿元 石家庄提前超额完成年度目标任务

2022-03-20

石家庄海关共签发RCEP原产地证书864份 货值3.9亿元

2022-03-20

蚌埠海关累计签发RCEP原产地证书35份 涉及金额2583.09万元

2022-03-20

绥化望奎以工业化思维为引领 推动肉类加工制造产业腾飞

2022-03-20

衡阳耒阳免费发放油茶苗 助推油茶产业稳步发展

2022-03-20

郴州安仁文旅项目集中开工 总投资1000万元

2022-03-20

2022年郴州计划重点推进文旅项目101个 总投资354亿元

2022-03-20

宿州泗县深入推进文旅融合发展 擦亮城市品牌

2022-03-20

汽车零部件产业“领头羊” 锦州力争一季度“开门红”

2022-03-20

油价或有望冲击“九元”大关 宁波新能源汽车市场如何

2022-03-20

从水塘到“云”端 全国最大高邮鸭养殖基地实现智慧养殖

2022-03-20

淡季不忘引流 京郊民宿市场有望迎来回暖

2022-03-20

镇江乡村一二三产业融合发展 闯出“镇江之路”

2022-03-20

总投资30亿元 盐城东台8个重大产业项目相继开工

2022-03-20

去年南京规上信息软件业企业实现营收7577.28亿元 同比增长10.3%

2022-03-20

2021年南京农业保险保费收入53.07亿元 同比增长19.13%

2022-03-20

安阳本土确诊病例上升至26例

2022-01-10

3次推迟婚期 满洲里抗疫民警兑现承诺:“我回来娶你了!”

2022-01-10

上海公安民警在岗位上迎接2022年“中国人民警察节”

2022-01-10

郑州核酸检测为中小学生开辟“绿色通道”

2022-01-10

反扒便衣警察“小曹”:藏在人海中的隐形“守护者”

2022-01-10

哥哥移植肾脏给病重弟弟 已在上海顺利康复

2022-01-10

网友与人裸聊被敲诈10万余元 被告人获刑5年

2022-01-10

1月10日起天津市暂停开展旅行社旅游业务活动

2022-01-10

“3·28”特大跨境电信网络诈骗案公开审理

2022-01-10

忠诚履职 守护万家灯火

2022-01-10

奥密克戎病例已涉天津、安阳 “动态清零”必须坚持!

2022-01-10

专家协作成功完成亲体肾移植 同“肾”兄弟顺利康复

2022-01-10

著名指挥陈燮阳携苏州交响乐团“相约北京”

2022-01-10

中国热科院选育出4个木薯新品种

2022-01-10

北京疾控:12月9日以来途经或旅居天津市人员请立即报备

2022-01-10

河南安阳本轮疫情累计报告确诊病例26例

2022-01-10

许勤批示黑土地保护不力问题:加快形成黑土地保护长效机制

2022-01-10

【挑战365天正能量速写画】第041期:当警娃难,当双警家庭的警娃更难

2022-01-10

重庆姐弟坠亡案两被告人5个月间聊天记录曝光

2022-01-10

因疫情防控措施落实不力 江苏金湖一超市被红牌警告

2022-01-10

江歌案一审判决刘鑫赔偿近70万元 有何依据?专家解读

2022-01-10

广东肇庆“毒驾连撞5车致1死”肇事司机被批捕

2022-01-10

一线工作近22年的缉毒警:我知道坏的是毒品不是人性

2022-01-10

青海保障门源地震后生活必需品应急物资

2022-01-10

江西最大文物倒卖案宣判:倒卖国家二级文物 9人获刑

2022-01-10

呼和浩特:寒假期间有条件的学校要开展校内托管服务

2022-01-10

广西东兴口岸恢复通关 入境需网上预约

2022-01-10

天津米面油存量由20天提高至30天 超市菜市场进货量翻倍

2022-01-10

天津市委市政府致全市父老乡亲的慰问信:我们一定能够打赢

2022-01-10

北京市十五届人大五次会议胜利闭幕

2022-01-10

“中国最后一个原始部落”翁丁老寨火灾原因公布

2022-01-10

天津:划定封控区 全市开展全员核酸检测

2022-01-10

重庆姐弟被生父扔下坠亡案上诉期结束 一审法院暂未收到两被告人上诉状

2022-01-10

子夜直击,天津寒天战“疫”

2022-01-10

兰州名师话“美育”:“尚乐立人”分层培优 以“美”润教

2022-01-10

中国边疆“北方第一所”:9名民警守护“生命禁区”

2022-01-10

江歌母亲江秋莲:尊重法院判决,法律认定在我意料之中

2022-01-10

河南安阳9日12时至24时新增11例本土确诊病例

2022-01-10

辟谣!网传“封控区管控区相继解封”通知并非西安

2022-01-10

铁路公安以110幅优秀书画作品庆祝人民警察节

2022-01-10

“中国最后一个原始部落”翁丁老寨火灾原因公布

2022-01-10

天津:划定封控区 全市开展全员核酸检测

2022-01-10

重庆姐弟被生父扔下坠亡案上诉期结束 一审法院暂未收到两被告人上诉状

2022-01-10

子夜直击,天津寒天战“疫”

2022-01-10

兰州名师话“美育”:“尚乐立人”分层培优 以“美”润教

2022-01-10