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

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

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

【連載】深度學(xué)習(xí)筆記14:CNN經(jīng)典論文研讀之Le-Net5及其Tensorflow實現(xiàn)

人工智能實訓(xùn)營 ? 2019-01-14 09:26 ? 次閱讀

在前幾次筆記中,筆者基本上將卷積神經(jīng)網(wǎng)絡(luò)的基本原理給講完了。從本次筆記開始,筆者在深度學(xué)習(xí)筆記中會不定期的對 CNN 發(fā)展過程中的經(jīng)典論文進行研讀并推送研讀筆記。今天筆者就和大家一起學(xué)習(xí)卷積神經(jīng)網(wǎng)絡(luò)和深度學(xué)習(xí)發(fā)展歷史上具有奠基性的經(jīng)典論文之一的關(guān)于 LeNet-5 網(wǎng)絡(luò)一文。LeNet-5 是由具有卷積神經(jīng)網(wǎng)絡(luò)之父之美譽的 Yann LeCun 在1998年發(fā)表在 IEEE 上面的一篇 Gradient-based learning applied to document recognition 上提出來的,所以直接由 LeCun 大佬名字命名了。
論文原文:
http://yann.lecun.com/exdb/publis/pdf/lecun-01a.pdf

LeNet-5 網(wǎng)絡(luò)結(jié)構(gòu)

該篇論文有 42 頁,但關(guān)于 LeNet-5 網(wǎng)絡(luò)的核心部分并沒有那么多,我們直接定位第二章的B 小節(jié)進行閱讀。LeNet-5 的網(wǎng)絡(luò)結(jié)構(gòu)如下:


LeNet-5 共有 7 層,輸入層不計入層數(shù),每層都有一定的訓(xùn)練參數(shù),其中三個卷積層的訓(xùn)練參數(shù)較多,每層都有多個濾波器,也叫特征圖,每個濾波器都對上一層的輸出提取不同的像素特征。所以 LeNet-5 的簡略結(jié)構(gòu)如下:

輸入-卷積-池化-卷積-池化-卷積(全連接)-全連接-全連接(輸出)

各層的結(jié)構(gòu)和參數(shù)如下:
C1層是個卷積層,其輸入輸出結(jié)構(gòu)如下:
輸入: 32 x 32 x 1 濾波器大小: 5 x 5 x 1 濾波器個數(shù):6
輸出: 28 x 28 x 6
參數(shù)個數(shù): 5 x 5 x 1 x 6 + 6 = 156

P2層是個池化層,其輸入輸出結(jié)構(gòu)如下:
輸入: 28 x 28 x 6 濾波器大?。?2 x 2 濾波器個數(shù):6
輸出: 14 x 14 x 6
參數(shù)個數(shù):2 x 6 = 12
在原文中,P1池化層采用的是平均池化,鑒于現(xiàn)在普遍都使用最大池化,所以在后面的代碼實現(xiàn)中我們統(tǒng)一采用最大池化。

C3層是個卷積層,其輸入輸出結(jié)構(gòu)如下:
輸入: 14 x 14 x 6 濾波器大小: 5 x 5 x 6 濾波器個數(shù):16
輸出: 10 x 10 x 16
參數(shù)個數(shù): 5 x 5 x 6 x 16 + 16 = 2416
640?wx_fmt=png
P2 池化之后的特征圖組合計算得到C3的濾波器個數(shù)。

P4層是個池化層,其輸入輸出結(jié)構(gòu)如下:
輸入: 10 x 10 x 16 濾波器大小: 2 x 2 濾波器個數(shù):16
輸出: 5 x 5 x 16
參數(shù)個數(shù): 2 x 16 = 32

C5層在論文中是個卷積層,但濾波器大小為 5 x 5,所以其本質(zhì)上也是個全連接層。如果將5 x 5 x 16 拉成一個向量,它就是一個全連接層。其輸入輸出結(jié)構(gòu)如下:
輸入: 5 x 5 x 16 濾波器大?。?5 x 5 x 16 濾波器個數(shù):120
輸出: 1 x 1 x 120
參數(shù)個數(shù): 5 x 5 x 16 x 120 + 120 = 48120

F6層是個全連接層,全連接的激活函數(shù)采用的是 tanh 函數(shù),其輸入輸出結(jié)構(gòu)如下:
輸入:120
輸出:84
參數(shù)個數(shù):120 x 84 + 84 = 10164

F7層即輸出層,也是個全連接層,其輸入輸出結(jié)構(gòu)如下:
輸入:84
輸出:10
參數(shù)個數(shù): 84 x 10 + 10 = 850

LeNet-5 的 Tensorflow 實現(xiàn)

我們前面關(guān)于如何使用 Tensorflow 搭建卷積神經(jīng)網(wǎng)絡(luò)的過程可以定下實現(xiàn) LeNet-5 的基本思路。如果在 python 中寫的時候我們需要定義創(chuàng)建輸入輸出的占位符變量模塊、初始化各層參數(shù)模塊、創(chuàng)建前向傳播模塊、定義模型優(yōu)化迭代模型,以及在最后設(shè)置輸入數(shù)據(jù)。

下面筆者用以上思路編寫一個 LeNet-5 的簡單實現(xiàn)代碼。
導(dǎo)入相關(guān)庫和創(chuàng)建輸入輸出的占位符變量:

importtensorflowastf
importnumpyasnp
fromtensorflow.examples.tutorials.mnistimportinput_data
defcreate_placeholder():
X=tf.placeholder(tf.float32,shape=(None,28*28))
Y=tf.placeholder(tf.float32,shape=(None,10))
keep_prob=tf.placeholder(tf.float32)
returnX,Y,keep_prob


初始化各層參數(shù):

definitialize_parameters():
W1=tf.get_variable('W1',[5,5,1,6],initializer=tf.contrib.layers.xavier_initializer())
b1=tf.get_variable('b1',[6],initializer=tf.zeros_initializer())

W2=tf.get_variable('W2',[5,5,6,16],initializer=tf.contrib.layers.xavier_initializer())
b2=tf.get_variable('b2',[16],initializer=tf.zeros_initializer())

W3=tf.get_variable('W3',[5,5,16,120],initializer=tf.contrib.layers.xavier_initializer())
b3=tf.get_variable('b3',[120],initializer=tf.zeros_initializer())

W4=tf.get_variable('W4',[120,84],initializer=tf.contrib.layers.xavier_initializer())
b4=tf.get_variable('b4',[84],initializer=tf.zeros_initializer())

W5=tf.get_variable('W5',[84,10],initializer=tf.contrib.layers.xavier_initializer())
b5=tf.get_variable('b5',[10],initializer=tf.zeros_initializer())

para={'W1':W1,
'b1':b1,
'W2':W2,
'b2':b2,
'W3':W3,
'b3':b3,
'W4':W4,
'b4':b4,
'W5':W5,
'b5':b5}
returnpara


創(chuàng)建 LeNet-5 的前向計算:

defforward_propagation(X,para,dropout):

X=tf.reshape(X,[-1,28,28,1])
X=tf.pad(X,[[0,0],[2,2],[2,2],[0,0]])

c1=tf.nn.conv2d(X,para['W1'],strides=[1,1,1,1],padding='VALID')+para['b1']
p2=tf.nn.max_pool(c1,ksize=[1,2,2,1],strides=[1,2,2,1],padding='VALID')
c3=tf.nn.conv2d(p2,para['W2'],strides=[1,1,1,1],padding='VALID')+para['b2']
p4=tf.nn.max_pool(c3,ksize=[1,2,2,1],strides=[1,2,2,1],padding='VALID')
c5=tf.nn.conv2d(p4,para['W3'],strides=[1,1,1,1],padding='VALID')+para['b3']
c5=tf.contrib.layers.flatten(c5)
f6=tf.nn.tanh(tf.add(tf.matmul(c5,para['W4']),para['b4']))
f7=tf.nn.tanh(tf.add(tf.matmul(f6,para['W5']),para['b5']))
f7=tf.nn.dropout(f7,dropout)
returnf7


創(chuàng)建模型優(yōu)化計算函數(shù):

640?wx_fmt=png


最后傳入 mnist 數(shù)據(jù)和相關(guān)超參數(shù):

640?wx_fmt=png

本文來自《自興人工智能》項目部:凱文


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

    關(guān)注

    1789

    文章

    46324

    瀏覽量

    236496
  • 機器學(xué)習(xí)
    +關(guān)注

    關(guān)注

    66

    文章

    8320

    瀏覽量

    132165
  • 深度學(xué)習(xí)
    +關(guān)注

    關(guān)注

    73

    文章

    5434

    瀏覽量

    120790
收藏 人收藏

    評論

    相關(guān)推薦

    如何在Tensorflow實現(xiàn)反卷積

    TensorFlow實現(xiàn)反卷積(也稱為轉(zhuǎn)置卷積或分?jǐn)?shù)步長卷積)是一個涉及多個概念和步驟的過程。反卷積在深度學(xué)習(xí)領(lǐng)域,特別是在圖像分割、圖像超分辨率、以及生成模型(如生成對抗網(wǎng)絡(luò)GA
    的頭像 發(fā)表于 07-14 10:46 ?492次閱讀

    TensorFlow是什么?TensorFlow怎么用?

    TensorFlow是由Google開發(fā)的一個開源深度學(xué)習(xí)框架,它允許開發(fā)者方便地構(gòu)建、訓(xùn)練和部署各種復(fù)雜的機器學(xué)習(xí)模型。TensorFlow
    的頭像 發(fā)表于 07-12 16:38 ?472次閱讀

    CNN與RNN的關(guān)系?

    深度學(xué)習(xí)的廣闊領(lǐng)域中,卷積神經(jīng)網(wǎng)絡(luò)(CNN)和循環(huán)神經(jīng)網(wǎng)絡(luò)(RNN)是兩種極為重要且各具特色的神經(jīng)網(wǎng)絡(luò)模型。它們各自在圖像處理、自然語言處理等領(lǐng)域展現(xiàn)出卓越的性能。本文將從概念、原理、應(yīng)用場景及代碼示例等方面詳細探討
    的頭像 發(fā)表于 07-08 16:56 ?443次閱讀

    CNN在多個領(lǐng)域中的應(yīng)用

    ,通過多層次的非線性變換,能夠捕捉到數(shù)據(jù)中的隱藏特征;而卷積神經(jīng)網(wǎng)絡(luò)(CNN),作為神經(jīng)網(wǎng)絡(luò)的一種特殊形式,更是在圖像識別、視頻處理等領(lǐng)域展現(xiàn)出了卓越的性能。本文旨在深入探究深度學(xué)習(xí)、神經(jīng)網(wǎng)絡(luò)與卷積神經(jīng)網(wǎng)絡(luò)的基本原理、結(jié)構(gòu)特點
    的頭像 發(fā)表于 07-08 10:44 ?618次閱讀

    CNN的定義和優(yōu)勢

    卷積神經(jīng)網(wǎng)絡(luò)(Convolutional Neural Networks, CNN)作為深度學(xué)習(xí)領(lǐng)域的核心成員,不僅在學(xué)術(shù)界引起了廣泛關(guān)注,更在工業(yè)界尤其是計算機視覺領(lǐng)域展現(xiàn)出了巨大的應(yīng)用價值。關(guān)于
    的頭像 發(fā)表于 07-05 17:37 ?3972次閱讀

    keras模型轉(zhuǎn)tensorflow session

    和訓(xùn)練深度學(xué)習(xí)模型。Keras是基于TensorFlow、Theano或CNTK等底層計算框架構(gòu)建的。TensorFlow是一個開源的機器學(xué)習(xí)
    的頭像 發(fā)表于 07-05 09:36 ?387次閱讀

    如何在TensorFlow中構(gòu)建并訓(xùn)練CNN模型

    TensorFlow中構(gòu)建并訓(xùn)練一個卷積神經(jīng)網(wǎng)絡(luò)(CNN)模型是一個涉及多個步驟的過程,包括數(shù)據(jù)預(yù)處理、模型設(shè)計、編譯、訓(xùn)練以及評估。下面,我將詳細闡述這些步驟,并附上一個完整的代碼示例。
    的頭像 發(fā)表于 07-04 11:47 ?583次閱讀

    人工智能深度學(xué)習(xí)的五大模型及其應(yīng)用領(lǐng)域

    隨著科技的飛速發(fā)展,人工智能(AI)技術(shù)特別是深度學(xué)習(xí)在各個領(lǐng)域展現(xiàn)出了強大的潛力和廣泛的應(yīng)用價值。深度學(xué)習(xí)作為人工智能的一個核心分支,通過模擬人腦神經(jīng)網(wǎng)絡(luò)的結(jié)構(gòu)和功能,
    的頭像 發(fā)表于 07-03 18:20 ?2971次閱讀

    如何利用CNN實現(xiàn)圖像識別

    卷積神經(jīng)網(wǎng)絡(luò)(CNN)是深度學(xué)習(xí)領(lǐng)域中一種特別適用于圖像識別任務(wù)的神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)。它通過模擬人類視覺系統(tǒng)的處理方式,利用卷積、池化等操作,自動提取圖像中的特征,進而實現(xiàn)高效的圖像識別。本
    的頭像 發(fā)表于 07-03 16:16 ?790次閱讀

    cnn卷積神經(jīng)網(wǎng)絡(luò)分類有哪些

    卷積神經(jīng)網(wǎng)絡(luò)概述 卷積神經(jīng)網(wǎng)絡(luò)(Convolutional Neural Network,簡稱CNN)是一種深度學(xué)習(xí)模型,由多層卷積層和池化層堆疊而成。CNN通過卷積操作提取圖像特征
    的頭像 發(fā)表于 07-03 09:28 ?383次閱讀

    深度學(xué)習(xí)與卷積神經(jīng)網(wǎng)絡(luò)的應(yīng)用

    到自然語言處理,深度學(xué)習(xí)CNN正逐步改變著我們的生活方式。本文將深入探討深度學(xué)習(xí)與卷積神經(jīng)網(wǎng)絡(luò)的基本概念、工作原理
    的頭像 發(fā)表于 07-02 18:19 ?667次閱讀

    TensorFlow與PyTorch深度學(xué)習(xí)框架的比較與選擇

    深度學(xué)習(xí)作為人工智能領(lǐng)域的一個重要分支,在過去十年中取得了顯著的進展。在構(gòu)建和訓(xùn)練深度學(xué)習(xí)模型的過程中,深度
    的頭像 發(fā)表于 07-02 14:04 ?735次閱讀

    深度神經(jīng)網(wǎng)絡(luò)模型cnn的基本概念、結(jié)構(gòu)及原理

    ,其核心是構(gòu)建具有多層結(jié)構(gòu)的神經(jīng)網(wǎng)絡(luò)模型,以實現(xiàn)對復(fù)雜數(shù)據(jù)的高效表示和處理。在眾多深度學(xué)習(xí)模型中,卷積神經(jīng)網(wǎng)絡(luò)(CNN)因其在圖像識別等領(lǐng)域的卓越性能而備受關(guān)注。
    的頭像 發(fā)表于 07-02 10:11 ?9211次閱讀

    基于Python和深度學(xué)習(xí)CNN原理詳解

    卷積神經(jīng)網(wǎng)絡(luò) (CNN) 由各種類型的層組成,這些層協(xié)同工作以從輸入數(shù)據(jù)中學(xué)習(xí)分層表示。每個層在整體架構(gòu)中都發(fā)揮著獨特的作用。
    的頭像 發(fā)表于 04-06 05:51 ?1835次閱讀
    基于Python和<b class='flag-5'>深度</b><b class='flag-5'>學(xué)習(xí)</b>的<b class='flag-5'>CNN</b>原理詳解

    如何使用TensorFlow構(gòu)建機器學(xué)習(xí)模型

    在這篇文章中,我將逐步講解如何使用 TensorFlow 創(chuàng)建一個簡單的機器學(xué)習(xí)模型。
    的頭像 發(fā)表于 01-08 09:25 ?869次閱讀
    如何使用<b class='flag-5'>TensorFlow</b>構(gòu)建機器<b class='flag-5'>學(xué)習(xí)</b>模型