深度學習(04)-- 典型CNN結構(LeNet5 ,AlexNet)

LeNet5

LeNet5可以說是最早的卷積神經網絡了,它發表于1998年,論文原文Gradient-Based Learning Applied to Doucment Recognition作者是Yann Le Cun等。下面對LeNet5網絡架構進行簡單的說明,有興趣的同學可以去參考原文,論文原文地址 http://yann.lecun.com/exdb/publis/pdf/lecun-01a.pdf。

在這里插入圖片描述
Conv1: f=[5,5], s=[1,1], padding=’valid’
Pool1: f=[2,2], s=[2,2]
Conv2: f=[5,5], s=[1,1], padding=’valid’
Pool2: f=[2,2], s=[1,1]
fc1: 1024 relu
fc2: 200 relu
fc3: 6 softMax

(m,64,64,3)-(m,60,60,8)-(m,30,30,8)-(m,26,26,16)-(m,13,13,16)
(m,1024)-(m,200)-(m,6)

def LeNet5(input_shape=(64,64,3), classes=6):X_input = Input(input_shape)X = Conv2D(filters=8, kernel_size=(5,5), strides=(1,1), padding='valid',name='conv1')(X_input)X = MaxPooling2D((2,2), strides=(2,2), name='maxpool1')(X)X = Conv2D(filters=16, kernel_size=(5,5), strides=(1,1), padding='valid',name='conv2')(X)X = MaxPooling2D((2,2), strides=(2,2), name='maxpool2')(X)X = Flatten()(X)X = Dense(1024,    activation='relu',    name='fc1')(X)X = Dense(200,     activation='relu',    name='fc2')(X)X = Dense(classes, activation='softmax', name='fc3')(X)model = Model(inputs=X_input, outputs=X, name='LeNet5')return model

卷積神經網絡在本質上是一種輸入到輸出的映射,它能夠學習大量的輸入與輸出之間的映射關系,而不需要任何輸入與輸出之間的精確的數學表達式,只要用已知的模式對卷積神經網絡加以訓練,網絡就具有輸入與輸出之間的映射能力。卷積網絡是有監督學習,所以它的樣本集都形如:(輸入向量,理想輸出向量)之類的向量對構成。
在訓練之前,所有權值都用一些不同的小隨機數進行初始化,小的隨機數可以保證網絡不會因權值太大而進入飽和狀態,從而導致訓練失敗。不同則保證網絡可以正常學習。
如果要是用相同的數去初始化矩陣,網絡會沒有學習的能力。

網絡的訓練過程為:
分為四步:
(1) 在一批數據中取樣(Sample a batch of data)
(2)前向過程計算得到損失(Forward prop it through the graph, get loss)
(3)反向傳播計算梯度(Backprop to calculate the gradient)
(4)利用梯度進行梯度的更新(Updata the parameters using the gradient)
這里,網絡的訓練主要分為2個大的階段:

第一階段,向前傳播階段:
1)從樣本集中取一個樣本(X,Yp),將X輸入網絡;

2)計算相應的實際輸出Op。

在此階段,信息從輸入層經過逐級的變換,傳送到輸出層。這個過程也是網絡在完成訓練后正常運行時執行的過程。在此過程中,網絡執行的是計算(實際上就是輸入與每層的權值矩陣相點乘,得到最后的輸出結果):

Op=Fn(…(F2(F1(XpW(1))W(2))…)W(n))

第二階段,向后傳播階段

1)算實際輸出Op與相應的理想輸出Yp的差;

2)按極小化誤差的方法反向傳播調整權矩陣。

AlexNet

1、AlexNet網絡結構

在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述

2、AlexNet應用在手勢RGB圖片

網絡結構

Input   (64,64,3)Conv1     f=[5,5],  s=[1,1],  (60,60,8)   Relu1
Maxpool1  f=[2,2],  s=[2,2],  (30,30,8)   LRN1Conv2     f=[5,5] ,  s=[1,1] ,  (26,26,16)  Relu2
Maxpool2  f=[2,2],  s=[2,2],   (13,13,16)  LRN2Conv3     f=[3,3],  s=[1,1],   padding=’same’,   (13,13,32)   Relu3Conv4     f=[3,3],  s=[1,1],   padding=’same’,   (13,13,32)   Relu4Conv5     f=[3,3],  s=[1,1],   padding=’same’,   (13,13,16)   Relu5
Avepool1  f=[3,3],  s=[2,2],   (6,6,16)Flatten 6*6*16Fc1   1024   Relu6   Dropout1Fc2   1024   Relu7   Dropout2Fc3   6  Softmax

代碼實現

def AlexNet(input_shape=(64,64,3), classes=6):X_input = Input(input_shape)"conv layer 1"X = Conv2D(filters=8, kernel_size=(5,5), strides=(1,1), padding='valid',name='conv1')(X_input)X = Activation('relu')(X)X = MaxPooling2D((2,2), strides=(2,2), name='maxpool1')(X)# X = LRN2D(alpha=0.0001, beta=0.75)(X)"conv layer 2"X = Conv2D(filters=16, kernel_size=(5,5), strides=(1,1), padding='valid',name='conv2')(X)X = Activation('relu')(X)X = MaxPooling2D((2,2), strides=(2,2), name='maxpool2')(X)# X = LRN2D(alpha=0.0001, beta=0.75)(X)"conv layer 3"X = Conv2D(filters=32, kernel_size=(3,3), strides=(1,1), padding='same',name='conv3')(X)X = Activation('relu')(X)"conv layer 4"X = Conv2D(filters=32, kernel_size=(3,3), strides=(1,1), padding='same',name='conv4')(X)X = Activation('relu')(X)"conv layer 5"X = Conv2D(filters=16, kernel_size=(3,3), strides=(1,1), padding='same',name='conv5')(X)X = Activation('relu')(X)X = AveragePooling2D((3,3), strides=(2,2), name='maxpool3')(X)"flatten, fc1, fc2, fc3"X = Flatten()(X)X = Dense(1024,    activation='relu',    name='fc1')(X)X = Dense(1024,    activation='relu',    name='fc2')(X)X = Dense(classes, activation='softmax', name='fc3')(X)model = Model(inputs=X_input, outputs=X, name='AlexNet')return model

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/445313.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/445313.shtml
英文地址,請注明出處:http://en.pswp.cn/news/445313.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Arrays工具類常見方法

Arrays類的常見操作 排序 : sort()查找 : binarySearch()比較: equals()填充 : fill()轉列表: asList()轉字符串 : toString()復制: copyOf() 排序 : sort() // *************排序 sort****************int a[] { 1, 3, 2, 7, 6, 5, 4, 9 };// sort(int[] a)方法按照數字順序…

Python(12)-while語句+賦值運算符號+轉義字符

while循環語句1.while基本語法2.break continue3.轉義字符4.賦值運算符5.Print函數輸出換行符號1.while基本語法 循環語句的程序三大流程之一: 順序 --從上到下以順序的方式執行代碼 分支流程–依據條件判斷,決定要執行的代碼分支–豐富代碼形式 循環–…

CNN的幾種經典模型

本文主要介紹一下CNN的幾種經典模型比較。之前自己也用過AlexNet和GoogleNet,網絡上關于各種模型的介紹更是形形色色,自己就想著整理一下,以備自己以后查閱方便 LeNet5 先放一張圖,我感覺凡是對深度學習有涉獵的人,對…

阿里Java編程規約(命名風格、常量定義、代碼格式)

命名風格 1、【強制】代碼中的命名均不能以下劃線或美元符號開始,也不能以下劃線或美元符號結束。 反例:_name / __name / $name / name_ / name$ / name__ 2、【強制】代碼中的命名嚴禁使用拼音與英文混合的方式,更不允許直接使用中文的方…

PaperNotes(2)-Generative Adversarial Net-代碼實現資料

Generative Adversarial Nets-生成對抗網絡Abstract1.Introduction2.Related work3.Adversarial nets4.Theoretical Results4.1全局最優 pgpdatap_gp_{data}pg?pdata?4.2算法1的收斂性質5.Experiments6.Advantagesa and disadvantages7.Conclusions and future work8.GAN-代碼…

深度學習(05)--典型CNN結構(VGG13,16,19)

文章目錄目錄1.VGG結構2.VGG結構解釋3.3*3卷積核的優點4.VGG的muti-scale方法5.VGG的應用目錄 1.VGG結構 ? LeNet5用大的卷積核來獲取圖像的相似特征 ? AlexNet用99、1111的濾波器 ? VGG 巨大的進展是通過依次采用多個 33 卷積,模仿出更大的感受野(r…

redis——發布和訂閱

頻道的訂閱和退訂 當一個客戶端執行 SUBSCRIBE 命令, 訂閱某個或某些頻道的時候, 這個客戶端與被訂閱頻道之間就建立起了一種訂閱關系。 Redis 將所有頻道的訂閱關系都保存在服務器狀態的 pubsub_channels 字典里面, 這個字典的鍵是某個被訂…

Pytorch(1)-內置/自己設計的損失函數使用

內置/自己設計的損失函數使用對比1.內置損失函數2.自己設計損失函數Pytorch內置了許多常用的損失函數,但是,實際應用中,往往需要依據不同的需求設計不同的損失函數。本篇博文對比總結了使用 內置和 自己設計損失函數的語法規則流程。1.內置損…

redis——事務

Redis 事務可以一次執行多個命令, 并且帶有以下三個重要的保證: 批量操作在發送 EXEC 命令前被放入隊列緩存。收到 EXEC 命令后進入事務執行,事務中任意命令執行失敗,其余的命令依然被執行。在事務執行過程,其他客戶端…

深度學習(06)-- Network in Network(NIN)

文章目錄目錄1.NIN 結構2.MLP卷積3.全局均值池化4.總體網絡架構5.NIN補充5.1 廣義線性模型(GLM)的局限性5.2 CCCP層5.3 1*1卷積核作用(補充)6.手勢識別RGB圖像--NIN結構目錄 1.NIN 結構 2.MLP卷積 傳統CNN的局部感受野窗口的運算…

Pytorch(2)-tensor常用操作

tensor常用數學操作1. 隨機數1.1 torch.rand() - 均勻分布數字1.2 torch.randn() - 正態分布數字2. 求和2.1 torch.sum(data, dim)2.2 numpy.sum(data, axis)3. 求積3.1 點乘--對應位置相乘3.2 矩陣乘法4. 均值、方差4.1 torch tensor.mean() .std()4.2 numpy array.mean() .st…

Java編程規約(OOP)

1、【強制】避免通過一個類的對象引用訪問此類的靜態變量或靜態方法,無謂增加編譯器解析 成本,直接用類名來訪問即可。 2、【強制】所有的覆寫方法,必須加Override 注解。 說明:getObject()與 get0bject()的問題。一個是字母的…

深度學習(07)-- 經典CNN網絡結構(Inception (v1-v4))

文章目錄目錄1.Inception介紹1.1 Inception結構1.2 Inception V1(GoogleNet)1.3 Inception V2(Batch Norm)1.4 Inception V3(Factorization)1.5 Inception V4(ResNet)1.5 Inception v1~v4 總結1.6 Inception進階2.Inception實現目…

Python(13)-函數,lambda語句

函數1 函數定義2 函數調用3 函數注釋文檔4 函數參數4.1 參數列表,默認參數,任意參數4.1.1 無缺省值參數4.1.2(部分)缺省值參數4.1.3 數量不定形參數4.2 可變對象和不可變對象4.3 作用域4.3.1 globals()函數4.3.2 global 聲明變量為全局變量5 函數返回值5…

深度學習(08)-- Residual Network (ResNet)

文章目錄目錄1.殘差網絡基礎1.1基本概念1.2VGG19、ResNet34結構圖1.3 梯度彌散和網絡退化1.4 殘差塊變體1.5 ResNet模型變體1.6 Residual Network補充1.7 1*1卷積核(補充)2.殘差網絡介紹(何凱明)3.ResNet-50(Ng)3.1 非常深的神經網…

Python(14)-模塊

模塊Python標準庫,第三方庫都是一個個模塊,我們還可以編寫自己的模塊。模塊python程序架構的核心模塊,模塊是一個工具包。 每一個以.py為擴展名的源代碼文件都是一個模塊。 想要使用工具包中的工具,可以使用Import的方式導入。 …

redis——命令請求的執行過程

發送命令請求 當用戶在客戶端中鍵入一個命令請求時, 客戶端會將這個命令請求轉換成協議格式, 然后通過連接到服務器的套接字, 將協議格式的命令請求發送給服務器。 讀取命令請求 當客戶端與服務器之間的連接套接字因為客戶端的寫入而變得可…

深度學習(09)-- DenseNet

文章目錄目錄1.DenseNet網絡結構2.稠密連接及其優點3.代碼實現4.補充說明目錄 1.DenseNet網絡結構 2.稠密連接及其優點 每層以之前層的輸出為輸入,對于有L層的傳統網絡,一共有L個連接,對于DenseNet,則有L*(L1)/2。 這篇論文主要…

redis——緩存擊穿/穿透/雪崩

緩存穿透 一般的緩存系統,都是按照key去緩存查詢,如果不存在對應的value,就去后端系統查找(比如DB)。 一些惡意的請求會故意查詢不存在的key,請求量很大,就會對后端系統造成很大的壓力。這就叫做緩存穿透…

python(15)-window7配置iPython

前提:安裝了Pythonanaconda anaconda安裝參考:https://www.zhihu.com/question/58033789 在window系統下可以使用兩種方法來實現類似與于Linux終端命令運行程序的方法(推薦方式2): 1.cmd:自己沒有操作過,可以參考下面…