在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

Relu算子的介紹

jf_pmFSk4VX ? 來(lái)源:GiantPandaCV ? 2023-01-11 17:07 ? 次閱讀

Relu算子的介紹

Relu是一種非線性激活函數(shù),它的特點(diǎn)有運(yùn)算簡(jiǎn)單,不會(huì)在梯度處出現(xiàn)梯度消失的情況,而且它在一定程度上能夠防止深度學(xué)習(xí)模型在訓(xùn)練中發(fā)生的過(guò)擬合現(xiàn)象。Relu的公式表達(dá)如下所示,「如果對(duì)于深度學(xué)習(xí)基本概念不了解的同學(xué),可以將Relu當(dāng)作一個(gè)公式進(jìn)行對(duì)待,可以不用深究其背后的含義。」

我們今天的任務(wù)就是來(lái)完成這個(gè)公式中的操作,「值得注意的是,在我們的項(xiàng)目中,x和y可以理解為我們?cè)诘诙⒌谌?jié)中實(shí)現(xiàn)的張量類(tensor).」

Operator類

Operator類就是我們?cè)诘谝还?jié)中說(shuō)過(guò)的計(jì)算圖中「節(jié)點(diǎn)」的概念,計(jì)算圖的另外一個(gè)概念是數(shù)據(jù)流圖,如果同學(xué)們忘記了這個(gè)概念,可以重新重新翻看第一節(jié)課程。

在我們的代碼中我們先定義一個(gè)「Operator」類,它是一個(gè)父類,其余的Operator,包括我們本節(jié)要實(shí)現(xiàn)的ReluOperator都是其派生類,「Operator中會(huì)存放節(jié)點(diǎn)相關(guān)的參數(shù)。」例如在「ConvOperator」中就會(huì)存放初始化卷積算子所需要的stride, padding, kernel_size等信息,本節(jié)的「ReluOperator」就會(huì)帶有「thresh」值信息。

我們從下方的代碼中來(lái)了解Operator類和ReluOperator類,它們是父子關(guān)系,Operator是基類,OpType記錄Operator的類型。

enumclassOpType{
kOperatorUnknown=-1,
kOperatorRelu=0,
};

classOperator{
public:
OpTypekOpType=OpType::kOperatorUnknown;

virtual~Operator()=default;

explicitOperator(OpTypeop_type);
};

ReluOperator實(shí)現(xiàn):

classReluOperator:publicOperator{
public:
~ReluOperator()override=default;

explicitReluOperator(floatthresh);

voidset_thresh(floatthresh);

floatget_thresh()const;

private:
floatthresh_=0.f;
};

Layer類

我們會(huì)在operator類中存放從「計(jì)算圖結(jié)構(gòu)文件」得到的信息,例如在ReluOperator中存放的thresh值作為一個(gè)參數(shù)就是我們從計(jì)算圖結(jié)構(gòu)文件中得到的,計(jì)算圖相關(guān)的概念我們已經(jīng)在第一節(jié)中講過(guò)。

下一步我們需要根據(jù)ReLuOperator類去完成ReluLayer的初始化,「他們的區(qū)別在于ReluOperator負(fù)責(zé)存放從計(jì)算圖中得到的節(jié)點(diǎn)信息,不負(fù)責(zé)計(jì)算」,而ReluLayer則「負(fù)責(zé)具體的計(jì)算操作」,同樣,所有的Layer類有一個(gè)公共父類Layer. 我們可以從下方的代碼中來(lái)了解兩者的關(guān)系。

classLayer{
public:
explicitLayer(conststd::string&layer_name);

virtualvoidForwards(conststd::vector>>&inputs,
std::vector>>&outputs);

virtual~Layer()=default;
private:
std::stringlayer_name_;
};

其中Layer的Forwards方法是具體的執(zhí)行函數(shù),負(fù)責(zé)將輸入的inputs中的數(shù)據(jù),進(jìn)行relu運(yùn)算并存放到對(duì)應(yīng)的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類,我們可以看到其中有一個(gè)op成員,是一個(gè)ReluOperator指針,「這個(gè)指針中負(fù)責(zé)存放ReluLayer計(jì)算時(shí)所需要用到的一些參數(shù)」。此處op_存放的參數(shù)比較簡(jiǎn)單,只有ReluOperator中的thresh參數(shù)。

我們?cè)倏纯词窃趺词褂肦eluOperator去初始化ReluLayer的,先通過(guò)統(tǒng)一接口傳入Operator類,再轉(zhuǎn)換為對(duì)應(yīng)的ReluOperator指針,最后再通過(guò)指針中存放的信息去初始化「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());
}

我們來(lái)看一下具體ReluLayer的Forwards過(guò)程,它在執(zhí)行具體的計(jì)算,完成Relu函數(shù)描述的功能。

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循環(huán)中,首先讀取輸入input_data, 再對(duì)input_data使用armadillo自帶的transform按照我們給定的thresh過(guò)濾其中的元素,如果「value」的值大于thresh則不變,如果小于thresh就返回0.

最后,我們寫(xiě)一個(gè)測(cè)試函數(shù)來(lái)驗(yàn)證我們以上的兩個(gè)類,節(jié)點(diǎn)op類,計(jì)算層layer類的正確性。

先判斷Forwards返回的outputs是否已經(jīng)保存了relu層的輸出,輸出大小應(yīng)該assert為1. 隨后再進(jìn)行比對(duì),我們應(yīng)該知道在thresh等于0的情況下,第一個(gè)輸出index(0)和第二個(gè)輸出index(1)應(yīng)該是0,第三個(gè)輸出應(yīng)該是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);
}
}

本期代碼倉(cāng)庫(kù)位置

gitclonehttps://gitee.com/fssssss/KuiperCourse.git
gitcheckoutfouth





審核編輯:劉清

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • ARM芯片
    +關(guān)注

    關(guān)注

    1

    文章

    126

    瀏覽量

    21515

原文標(biāo)題:自制深度學(xué)習(xí)推理框架-實(shí)現(xiàn)我們的第一個(gè)算子Relu-第三課

文章出處:【微信號(hào):GiantPandaCV,微信公眾號(hào):GiantPandaCV】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    什么是PRelu算子?PRelu算子調(diào)優(yōu)經(jīng)歷-先行篇

    一個(gè)叫做PRelu的算子,想要運(yùn)行在RT170上。 本來(lái)小編是信心滿滿的答應(yīng)客戶說(shuō): 速度上放心,我們這主頻1GHz的CPU絕對(duì)沒(méi)問(wèn)題,包您滿意。 沒(méi)想到跑分結(jié)果出爐直接給了小編沉重一擊。 直接依賴
    的頭像 發(fā)表于 08-24 08:50 ?1437次閱讀
    什么是PRelu<b class='flag-5'>算子</b>?PRelu<b class='flag-5'>算子</b>調(diào)優(yōu)經(jīng)歷-先行篇

    基于GFO算子的圖像增強(qiáng)算法如何去實(shí)現(xiàn)?

    基于GFO算子(廣義模糊算子)的圖像增強(qiáng)算法如何去實(shí)現(xiàn)?怎樣對(duì)圖像增強(qiáng)算法進(jìn)行分析?
    發(fā)表于 06-04 06:24

    邊緣檢測(cè)的幾種微分算子

    一、邊緣檢測(cè)邊緣檢測(cè)的幾種微分算子:一階微分算子:Roberts、Sobel、Prewitt二階微分算子:Laplacian、Log/Marr非微分算子:Canny一階微分
    發(fā)表于 07-26 08:29

    bottom-up多層規(guī)約圖融合策略資料介紹

    (例如Conv+ReLU)則受限于供應(yīng)商API的支持程度。  隨著AI模型在各領(lǐng)域的發(fā)展、成熟和落地,模型推理在具體設(shè)備上的性能變得越發(fā)重要,17年到18年,業(yè)界出現(xiàn)了大量面向DL模型推理的計(jì)算框架,算子
    發(fā)表于 11-09 17:33

    LOG算子在FPGA中的實(shí)現(xiàn)

    介紹了一種高斯拉普拉斯LOG算子在FPGA中的實(shí)現(xiàn)方案!并通過(guò)對(duì)一幅BMP圖像的處理!論證了在FPGA中實(shí)現(xiàn)的LOG算子的圖像增強(qiáng)效果
    發(fā)表于 05-16 17:12 ?50次下載
    LOG<b class='flag-5'>算子</b>在FPGA中的實(shí)現(xiàn)

    邊緣檢測(cè)算子在汽車牌照區(qū)域檢測(cè)中的應(yīng)用

    文中介紹了常用的幾種 邊緣檢測(cè) 算子,不同的微分算子對(duì)不同邊緣檢測(cè)的敏感程度是不同的,因此對(duì)不同類型的邊緣提取,應(yīng)該采用對(duì)此類邊緣敏感的算子進(jìn)行邊緣提取。針對(duì)車輛牌
    發(fā)表于 07-25 16:13 ?22次下載
    邊緣檢測(cè)<b class='flag-5'>算子</b>在汽車牌照區(qū)域檢測(cè)中的應(yīng)用

    基于修正的直覺(jué)模糊集成算子

    已有的一些直覺(jué)模糊集成算子在處理一些特殊直覺(jué)模糊數(shù)時(shí)會(huì)出現(xiàn)反直覺(jué)現(xiàn)象。首先介紹了兩個(gè)直覺(jué)模糊集成算子和直覺(jué)模糊數(shù)的比較方法。接著,舉例說(shuō)明了這些集成算子在某些情況下出現(xiàn)的反直覺(jué)現(xiàn)象。然
    發(fā)表于 11-17 14:36 ?9次下載

    深度ReLU網(wǎng)絡(luò)的訓(xùn)練動(dòng)態(tài)過(guò)程及其對(duì)泛化能力的影響

    基于這個(gè)框架,我們?cè)噲D用統(tǒng)一的觀點(diǎn)來(lái)解釋這些令人費(fèi)解的經(jīng)驗(yàn)現(xiàn)象。本文使用師生設(shè)置,其中給過(guò)度參數(shù)化的深度學(xué)生ReLU網(wǎng)絡(luò)的標(biāo)簽,是具有相同深度和未知權(quán)重的固定教師ReLU網(wǎng)絡(luò)的輸出(圖1(a))。在這個(gè)角度來(lái)看,隱藏的學(xué)生節(jié)點(diǎn)將隨機(jī)初始化為不同的激活區(qū)域。(圖2(a))
    的頭像 發(fā)表于 06-15 10:48 ?3372次閱讀
    深度<b class='flag-5'>ReLU</b>網(wǎng)絡(luò)的訓(xùn)練動(dòng)態(tài)過(guò)程及其對(duì)泛化能力的影響

    在PyTorch中使用ReLU激活函數(shù)的例子

    PyTorch已為我們實(shí)現(xiàn)了大多數(shù)常用的非線性激活函數(shù),我們可以像使用任何其他的層那樣使用它們。讓我們快速看一個(gè)在PyTorch中使用ReLU激活函數(shù)的例子:
    的頭像 發(fā)表于 07-06 15:27 ?2575次閱讀

    Sobel算子原理介紹與實(shí)現(xiàn)方法

    索貝爾算子(Sobel operator)主要用作邊緣檢測(cè),在技術(shù)上,它是一離散性差分算子,用來(lái)運(yùn)算圖像亮度函數(shù)的灰度之近似值。在圖像的任何一點(diǎn)使用此算子,將會(huì)產(chǎn)生對(duì)應(yīng)的灰度矢量或是其法矢量Sobel 卷積因子為:
    的頭像 發(fā)表于 07-21 17:27 ?1.3w次閱讀

    自定義算子開(kāi)發(fā)

    一個(gè)完整的自定義算子應(yīng)用過(guò)程包括注冊(cè)算子算子實(shí)現(xiàn)、含自定義算子模型轉(zhuǎn)換和運(yùn)行含自定義op模型四個(gè)階段。在大多數(shù)情況下,您的模型應(yīng)該可以通過(guò)使用hb_mapper工具完成轉(zhuǎn)換并順利部署
    的頭像 發(fā)表于 04-07 16:11 ?2846次閱讀
    自定義<b class='flag-5'>算子</b>開(kāi)發(fā)

    深度ReLU網(wǎng)絡(luò)的對(duì)應(yīng)淺層網(wǎng)絡(luò)

    ? 只要你用了ReLU,我們就是好朋就是“淺度學(xué)習(xí)”。 最近有研究證明,所有基于ReLU的深度神經(jīng)網(wǎng)絡(luò)都可以重寫(xiě)為功能相同的3層神經(jīng)網(wǎng)絡(luò)。 ? 基于這個(gè)證明,倫敦國(guó)王學(xué)院的研究團(tuán)隊(duì)還提出一種為任意
    的頭像 發(fā)表于 07-03 14:13 ?589次閱讀
    深度<b class='flag-5'>ReLU</b>網(wǎng)絡(luò)的對(duì)應(yīng)淺層網(wǎng)絡(luò)

    機(jī)器學(xué)習(xí)算法的5種基本算子

    自主決策的方法和插件,其中包含了一系列常用的基本算子。在本文中,我們將會(huì)介紹機(jī)器學(xué)習(xí)算法的五種基本算子。 一、 求值算子 求值算子是常用的機(jī)
    的頭像 發(fā)表于 08-17 16:11 ?1842次閱讀

    Dynamic ReLU:根據(jù)輸入動(dòng)態(tài)確定的ReLU

    這是我最近才看到的一篇論文,它提出了動(dòng)態(tài)ReLU (Dynamic ReLU, DY-ReLU),可以將全局上下文編碼為超函數(shù),并相應(yīng)地調(diào)整分段線性激活函數(shù)。
    的頭像 發(fā)表于 09-01 17:28 ?727次閱讀
    Dynamic <b class='flag-5'>ReLU</b>:根據(jù)輸入動(dòng)態(tài)確定的<b class='flag-5'>ReLU</b>

    圖像銳化的Sobel、Laplacian算子基礎(chǔ)知識(shí)介紹

    Sobel 算子是一種用于邊緣檢測(cè)的離散微分算子,它結(jié)合了高斯平滑和微分求導(dǎo)
    的頭像 發(fā)表于 09-13 09:52 ?1491次閱讀
    圖像銳化的Sobel、Laplacian<b class='flag-5'>算子</b>基礎(chǔ)知識(shí)<b class='flag-5'>介紹</b>
    主站蜘蛛池模板: 夜夜夜夜操| 天天干天天上| 国内黄色一级片| 国产私密| 99热这里只有精品一区二区三区| 91九色成人| 午夜观看| 美女脱裤子屁屁视频| 5566精品资源在线播放| 91在线免费看| 最近2018中文字幕2019视频| 性色爽爱性色爽爱网站| 三级黄色免费| 久久涩精品| 222www免费观看| 你懂得国产| 欧美三级黄色| 国产精品污视频| 色秀视频免费网站在线观看| 两性午夜欧美高清做性| www.你懂的| 免费一级e一片在线播放| 欧美精品网| 中文三级视频| 日韩精品网址| 国产成人三级经典中文| 天堂va欧美ⅴa亚洲va一国产| 国产成人亚洲影视在线| 色香欲亚洲天天综合网| 四虎最新网址在线观看| 辣h高h肉h激h超h| 一本大道加勒比久久| 福利一级片| 最新地址四虎www4hutv| 碰免费人人人视频| cijilu刺激 国产| 精品国产一区二区三区成人| 视频一区二区三区在线观看| 四虎影视色费永久在线观看| 久久久噜噜噜久久久午夜| 午夜寂寞影|