1. 程式人生 > >CNN卷積神經網路結構及引數配置

CNN卷積神經網路結構及引數配置

來源:機器學習演算法與自然語言處理

作者:白雪峰

轉載於:https://blog.csdn.net/np4rHI455vg29y2/article/details/78958121

1、CNN例子

Yann LeCun提出的最基本和開始的CNN結構圖

640?wx_fmt=jpeg&wxfrom=5&wx_lazy=1

640?wx_fmt=jpeg

2、什麼是CNN

2.1、什麼是卷積

連續和離散卷積的定義:

640?wx_fmt=jpeg

特點:

640?wx_fmt=jpeg

2.2、離散卷積的例子

丟骰子時加起來要等於4的概率是多少?

640?wx_fmt=jpeg

二維離散的卷積

640?wx_fmt=jpeg

計算的動圖如下

0?wx_fmt=gif

2.3、用到二維影象上

關於卷積中常用到的一些概念:神經網路的卷積是對應位相乘,現在是訊號相乘。

在影象處理中,卷積通常被稱作為filtering,現在也有很多著名的filtering/convolution kernels都是在影象中抓取直觀特徵的。

下面移動的小矩陣有兩種叫法:一種叫做濾波器filter,一種叫做卷積核kernel,是相同東西的兩種不同叫法。

0?wx_fmt=gif

640?wx_fmt=jpeg

2.4、用到神經網路中

我們其實需要學習的就是裡面的線上面對應的權值,比如下面綠色的代表3*1的卷積核大小,只是這裡用神經網路的結構表示出來了。

640?wx_fmt=jpeg

2.5、卷積的細節

  • filter/kernel size, number

假設神經網路的輸入是6*6的影象。

640?wx_fmt=jpeg

其中每個卷積核代表提取不同的特徵,多個卷積核提取的特徵然後進行組合(這樣更強大),一同送入到後續的結構。

下面來一個更通俗的解釋:

640?wx_fmt=jpeg

每個人代表一個卷積核來進行提取不同的特徵,一個人是弱小的,但是一組人就強大了,他們有著不同的知識(權重),這樣類比來理解,就會好理解很多。

  • stride

使用filter掃描圖片的步的大小。

640?wx_fmt=jpeg

  • zero-padding

一種不忽略邊界模式的方法。

新影象要比原影象更小。

640?wx_fmt=jpeg

  • channel

640?wx_fmt=jpeg

2.6、池化(pooling)

池化層從它們的輸入中子取樣。

1)、Spatial pooling(也稱作subsampling或者downsampling)減少每個特徵對映的維度。

2)、保持最重要的資訊。

max pooling例子(average pooling etc)

640?wx_fmt=jpeg

  • Pooling具有區域性不變性。
  • 影象往左或者往右移動,pooling的結果是不變的。

640?wx_fmt=jpeg

2.7、flatten

640?wx_fmt=jpeg

2.8、Convolution VS Fully Connected

640?wx_fmt=jpeg

640?wx_fmt=jpeg

640?wx_fmt=jpeg

2.9、CNN的整體

640?wx_fmt=jpeg

所以從整體來看,CNN的組成:

  • Convolution(卷積層)
  • Nolinearity:e.g ReLu(非線性轉化)
  • Pooling(池化)
  • FC Layers(全連線層)

640?wx_fmt=jpeg

3、為什麼CNN有效

3.1、一些模式是比整幅影象更小的影象    

640?wx_fmt=jpeg

3.2、一些相同的模式出現在不同的區域中

640?wx_fmt=jpeg

3.3、子取樣畫素不會改變物件

640?wx_fmt=jpeg

640?wx_fmt=jpeg

4、對CNN的一些其他理解

4.1、關於接受域(receptive field)

稱在底層中影響上層輸出單元s的單元合集為s的接受域(receptive field)。

640?wx_fmt=jpeg

處於卷積網路更深的層中的單元,它們的接受域要比處在淺層的單元的接受的域更大。如果網路還包含類似步幅卷積或者池化之類的結構特徵,這種效應會加強。這意味著在卷積網路中儘管直接連線都是很稀疏的,但處在更深的層中的單元可以間接地連結到全部或者大部分輸入影象。(表現效能)

640?wx_fmt=jpeg

4.2、卷積和池化作為一種無限強的先驗

首先,弱先驗具有較高的熵值,因此自由性較強,強先驗具有較低的熵值,這樣的先驗在決定引數最終取值時可以起著非常積極的作用。

把卷積網路類比成全連線網路,但對於網路的權重具有無限強的先驗。

  • 所有隱藏單元的權重是共享的。

  • 除了一些連續的小單元的權重外,其他的權重都是0.

  • 池化也是一個無限強的先驗:每個單元都具有對少量平移的不變性。

卷積和池化可能導致欠擬合!任何其他先驗類似,卷積和池化只有當先驗的夾著合理且正確時才有用。如果一項任務依賴於儲存精確的空間資訊,那麼在所有的特徵上使用池化將會增大訓練誤差。

根據實際需求選取先驗。



相關推薦

CNN神經網路結構引數配置

來源:機器學習演算法與自然語言處理作者:白雪峰轉載於:https://blog.csdn.net/np4rHI455vg29y2/article/details/789581211、CNN例子Yann LeCun提出的最基本和開始的CNN結構圖2、什麼是CNN2.1、什麼是卷

CNN 神經網路結構

CNN cnn每一層會輸出多個feature map, 每個Feature Map通過一種卷積濾波器提取輸入的一種特徵,每個feature map由多個神經元組成,假如某個feature map的shape是m*n, 則該feature map有m*n個神經元

詳細解釋CNN神經網路各層的引數和連線個數的計算

積神經網路是一個多層的神經網路,每層由多個二維平面組成,而每個平面由多個獨立神經元組成。        圖:卷積神經網路的概念示範:輸入影象通過和三個可訓練的濾波器和可加偏置進行卷積,濾波過程如圖一,卷積後在C1層產生三個特徵對映圖,然後特徵對映圖中每組的四個畫素再進行

詳細解釋CNN神經網路各層的引數和連結個數的計算

卷積神經網路是一個多層的神經網路,每層由多個二維平面組成,而每個平面由多個獨立神經元組成。        圖:卷積神經網路的概念示範:輸入影象通過和三個可訓練的濾波器和可加偏置進行卷積,濾波過程如圖

CNN神經網路應用於人臉識別(詳細流程+程式碼實現)和相應的超引數解釋

DeepLearning tutorial(5)CNN卷積神經網路應用於人臉識別(詳細流程+程式碼實現) @author:wepon 本文主要講解將CNN應用於人臉識別的流程,程式基於Python+numpy+theano+PIL開發,採用類似LeNet5的

Deep Learning-TensorFlow (8) CNN神經網路_《TensorFlow實戰》經典網路模型(上)

環境:Win8.1 TensorFlow1.0.1 軟體:Anaconda3 (整合Python3及開發環境) TensorFlow安裝:pip install tensorflow (CPU版) pip install tensorflow-gpu (GPU版) 轉載:

Deep Learning-TensorFlow (9) CNN神經網路_《TensorFlow實戰》經典網路模型(下)

環境:Win8.1 TensorFlow1.0.1 軟體:Anaconda3 (整合Python3及開發環境) TensorFlow安裝:pip install tensorflow (CPU版) pip install tensorflow-gpu (GPU版)

CNN(神經網路)、RNN(迴圈神經網路)、DNN(深度神經網路)的內部網路結構的區別

神經網路技術起源於上世紀五、六十年代,當時叫感知機(perceptron),擁有輸入層、輸出層和一個隱含層。輸入的特徵向量通過隱含層變換達到輸出層,在輸出層得到分類結果。早期感知機的推動者是Rosenblatt。(扯一個不相關的:由於計算技術的落後,當時感知

Keras學習(四)——CNN神經網路

本文主要介紹使用keras實現CNN對手寫資料集進行分類。 示例程式碼: import numpy as np from keras.datasets import mnist from keras.utils import np_utils from keras.models impo

CNN神經網路簡單實現模型

這是基於Mnist手寫識別的資料訓練的一個簡單的CNN卷積神經網路,可以直接在網上下載訓練資料集,但是經常會出現連線不到伺服器的提示,所以我下到本地進行資料的載入,下面程式碼的資料載入有問題,所以自己找了一些程式碼整出來了這個資料載入的辦法,連結為:https://blog.csdn.net/lxi

【深度學習】Tensorflow——CNN 神經網路 2

轉自https://morvanzhou.github.io/tutorials/machine-learning/tensorflow/5-05-CNN3/ 目錄 圖片處理  建立卷積層  建立全連線層  選優化方法  完整程式碼

【深度學習】Tensorflow——CNN 神經網路 1

轉自https://morvanzhou.github.io/tutorials/machine-learning/tensorflow/5-04-CNN2/ 這一次我們會說道 CNN 程式碼中怎麼定義 Convolutional 的層和怎樣進行 pooling. 基於上一次卷積神經網路的介

TensorFlow之CNN神經網路的實現

下載MNIST資料集(28*28,輸入維度為784) import tensorflow as tf #下載MNIST資料集(28*28,輸入維度為784) from tensorflow.examples.tutorials.mnist import input_data mnist =

DeepLearning tutorial(4)CNN神經網路原理簡介+程式碼詳解

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

Python CNN神經網路程式碼實現

1 # -*- coding: utf-8 -*- 2 """ 3 Created on Wed Nov 21 17:32:28 2018 4 5 @author: zhen 6 """ 7 8 import tensorflow as tf 9 from tensorflow.e

TensorFlow實現CNN神經網路對手寫數字集mnist的模型訓練

mnist手寫數字集相當於是TensorFlow應用中的Helloworld。 在學習了TensorFlow的卷積神經網路應用之後,今天就分步解析一下其應用過程  一、mnist手寫數字資料集         MN

CNN神經網路入門整合

這是一篇關於CNN入門知識的部落格,基本手法是抄、刪、改、查,就算是自己的一個筆記吧,以後忘了多看看。   1.邊界檢測示例 假如你有一張如下的影象,你想讓計算機搞清楚影象上有什麼物體,你可以做的事情是檢測影象的垂直邊緣和水平邊緣。   卷積計算可以得

CNN-神經網路

開局一張圖 資料輸入層 去均值:把輸入資料各個維度都中心化到0             注意只是在訓練資料上,測試集上減去的是訓練集上的均值,不要再求測試集的均值。 歸一化:幅度歸一到同一範圍。             在實際操作中不用,因為RGB天生就是0-2

吳恩達deeplearning之CNN神經網路入門

1.邊界檢測示例 假如你有一張如下的影象,你想讓計算機搞清楚影象上有什麼物體,你可以做的事情是檢測影象的垂直邊緣和水平邊緣。  如下是一個6*6的灰度影象,構造一個3*3的矩陣,在卷積神經網路中通常稱之為filter,對這個6*6的影象進行卷積運算,以左上角的-5計算為例  3*1+

CNN神經網路原理的直觀理解

哈哈?偶然在知乎上翻到了我旭神對CNN原理的通俗易懂的解釋,看完以後簡直醍醐灌頂呢。 下面上頭像!! 哼,趕緊記錄一下加強一下理解! 轉自知乎我旭神 如果學過數字影象處理,對於卷積核的作用應該不陌生,比如你做一個最簡單的方向濾波器,那就是一個二維卷積核,這個