<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          實(shí)踐教程|用 C++ 從零開始實(shí)現(xiàn)CNN

          共 2322字,需瀏覽 5分鐘

           ·

          2022-03-03 07:26

          作者丨山與水你和我@知乎
          來源丨h(huán)ttps://zhuanlan.zhihu.com/p/468100301

          導(dǎo)讀

          ?

          目前搭建卷積神經(jīng)網(wǎng)絡(luò)(CNN)一般直接用Pytorch、Tensorflow等深度學(xué)習(xí)框架,很簡(jiǎn)單。但如果是手寫反向傳播過程,情況就比BP網(wǎng)絡(luò)復(fù)雜多了,因?yàn)椴粌H僅是矩陣相乘。本文詳解了作者從零開始用c++實(shí)現(xiàn)CNN的過程,附詳細(xì)代碼介紹。?

          目前搭建卷積神經(jīng)網(wǎng)絡(luò)(CNN)一般直接用 Pytorch、Tensorflow 等深度學(xué)習(xí)框架,很簡(jiǎn)單。但如果是手寫反向傳播過程,情況就比 BP 網(wǎng)絡(luò)復(fù)雜多了,因?yàn)椴粌H僅是矩陣相乘。

          目標(biāo)是,從零開始實(shí)現(xiàn) CNN。

          剛開始,本人搜網(wǎng)上的卷積神經(jīng)網(wǎng)絡(luò)反向推導(dǎo)的相關(guān)博客,發(fā)現(xiàn)了幾個(gè)問題:

          • 公式看的實(shí)在腦袋疼,不好理解,一大堆的 ,變量還特別多,最后自己實(shí)現(xiàn)才發(fā)現(xiàn),卷積的時(shí)間復(fù)雜度還挺高,好幾層 for;
          • 卷積層的反向傳播,從輸出回傳的梯度 ,求輸入的梯度 存在一個(gè)權(quán)重矩陣 rot180 的操作,而且還需要對(duì)梯度 填充 padding 的問題,見卷積神經(jīng)網(wǎng)絡(luò)(CNN)反向傳播算法 - 劉建平Pinard - 博客園:https://www.cnblogs.com/pinard/p/6494810.html(劉建平老師的博客強(qiáng)烈推薦),如下
          例子

          這個(gè)例子沒有錯(cuò),但只是一種特殊情況,如果步長(zhǎng) stride 大于 1,就不僅僅是外圍填充 0 了,還需要對(duì) 數(shù) 據(jù)之間也做填充 0,具體過程和轉(zhuǎn)置卷積的前向過程一模一樣。但即使真的可以這樣做,寫對(duì)了,做 padding 消耗也是很大的,假設(shè) stride = 2,則大約有 的計(jì)算都是跟 0 做乘法,是無意義的計(jì)算,個(gè)人以為不可取,個(gè)人改用了其他思路。

          后續(xù)一步步實(shí)現(xiàn),遇到的也不僅僅這兩個(gè)問題,一一克服,整個(gè)過程的關(guān)鍵就是——硬著頭皮,老老實(shí)實(shí)寫,別看公式

          這也是本人一直以來的夙愿,終于實(shí)現(xiàn)。整個(gè)過程中,又回顧了一些 C++ 的坑與優(yōu)化技巧,對(duì)卷積的前向以及后向過程和如何搭建深度學(xué)習(xí)流程有了更清晰的認(rèn)識(shí),收獲頗豐。

          提綱

          卷積神經(jīng)網(wǎng)絡(luò)(一)tensor 定義:https://zhuanlan.zhihu.com/p/463673933

          卷積神經(jīng)網(wǎng)絡(luò)(二)從圖像到 tensor:https://zhuanlan.zhihu.com/p/468161119

          卷積神經(jīng)網(wǎng)絡(luò)(三)ReLU 層:https://zhuanlan.zhihu.com/p/468161821

          卷積神經(jīng)網(wǎng)絡(luò)(四)池化層:https://zhuanlan.zhihu.com/p/468163843

          卷積神經(jīng)網(wǎng)絡(luò)(五)卷積層:https://zhuanlan.zhihu.com/p/468164733

          卷積神經(jīng)網(wǎng)絡(luò)(六)Linear 線性層:https://zhuanlan.zhihu.com/p/468165951

          卷積神經(jīng)網(wǎng)絡(luò)(七)搭建 CNN 網(wǎng)絡(luò)結(jié)構(gòu):https://zhuanlan.zhihu.com/p/469475509

          卷積神經(jīng)網(wǎng)絡(luò)(八)訓(xùn)練 CNN:https://zhuanlan.zhihu.com/p/468177334

          代碼

          https://github.com/hermosayhl/CNN

          環(huán)境

          1. Windows 11
          2. >=C++17(TDM GCC 10.3.0:https://jmeubank.github.io/tdm-gcc/download/
          3. OpenCV 4.5.2
          4. 構(gòu)建工具 Cmake

          數(shù)據(jù)集

          采用的小型圖像分類數(shù)據(jù)集,從 cat-dog-panda:https://www.kaggle.com/ashishsaxena2209/animal-image-datasetdog-cat-and-panda 數(shù)據(jù)集剔除 cat(cat 和 dog 相對(duì)比較難),然后又從 CUB-200 bird:http://www.vision.caltech.edu/visipedia/CUB-200.html 數(shù)據(jù)集中隨機(jī)抽出 1000 張鳥類圖像,湊成三分類的小型數(shù)據(jù)集。train : valid : test 比例 8:1:1。

          網(wǎng)絡(luò)模型

          本人也不知道是什么網(wǎng)絡(luò)結(jié)構(gòu),隨便設(shè)計(jì)的(能跑就行),只有卷積層、最大池化層、ReLU 層、Softmax 層、Linear 全連接層,比 AlexNet 要簡(jiǎn)單,接受的輸入大小是 224x224x3,輸出 3 個(gè)值,經(jīng)過 softmax 得到概率,損失函數(shù)是交叉熵,優(yōu)化方法是 SGD 隨機(jī)梯度下降,最終在測(cè)試集上大概可以達(dá)到 0.91 的準(zhǔn)確率,不高,但至少跑通了。

          后面雖然也寫了 BatchNorm 層、DropOut 層,訓(xùn)練是沒問題的,這倆的前向和反向傳播都對(duì),但 valid 和 test 階段,過擬合了。。。按照網(wǎng)上諸多說法嘗試,但都失敗了,遺留問題。

          后面還嘗試了 Grad-CAM 可視化神經(jīng)網(wǎng)絡(luò),實(shí)現(xiàn)跟論文里的細(xì)節(jié)些許不一樣,例子如下,分類為 bird


          往期精彩:

          ?第二次印刷已上市!附最新勘誤表!

          《機(jī)器學(xué)習(xí) 公式推導(dǎo)與代碼實(shí)現(xiàn)》隨書PPT示例

          ?時(shí)隔一年!深度學(xué)習(xí)語(yǔ)義分割理論與代碼實(shí)踐指南.pdf第二版來了!

          ?新書首發(fā) | 《機(jī)器學(xué)習(xí) 公式推導(dǎo)與代碼實(shí)現(xiàn)》正式出版!

          《機(jī)器學(xué)習(xí)公式推導(dǎo)與代碼實(shí)現(xiàn)》將會(huì)配套PPT和視頻講解!

          ?2021,我讀了32本書!

          瀏覽 357
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  夜夜躁恨恨躁爱躁 | 操屄免费在线视频 | 国产在线小视频 | 久久电影伊人 | 免费一级a毛一级a看免费视频下载 |