Ⅰ 如何通過人工神經網路實現圖像識別
人工神經網路(Artificial Neural Networks)(簡稱ANN)系統從20 世紀40 年代末誕生至今僅短短半個多世紀,但由於他具有信息的分布存儲、並行處理以及自學習能力等優點,已經在信息處理、模式識別、智能控制及系統建模等領域得到越來越廣泛的應用。尤其是基於誤差反向傳播(Error Back Propagation)演算法的多層前饋網路(Multiple-Layer Feedforward Network)(簡稱BP 網路),可以以任意精度逼近任意的連續函數,所以廣泛應用於非線性建模、函數逼近、模式分類等方面。
目標識別是模式識別領域的一項傳統的課題,這是因為目標識別不是一個孤立的問題,而是模式識別領域中大多數課題都會遇到的基本問題,並且在不同的課題中,由於具體的條件不同,解決的方法也不盡相同,因而目標識別的研究仍具有理論和實踐意義。這里討論的是將要識別的目標物體用成像頭(紅外或可見光等)攝入後形成的圖像信號序列送入計算機,用神經網路識別圖像的問題。
一、BP 神經網路
BP 網路是採用Widrow-Hoff 學習演算法和非線性可微轉移函數的多層網路。一鬧肢個典型的BP 網路採用的是梯度下降演算法,也就是Widrow-Hoff 演算法所規定的。backpropagation 就是指的為非線性多層網路計算梯度的方法。一個典型的BP 網路結構如圖所示。
我們將它用向量圖表示如下圖所示。
其中:對於第k 個模式對,輸出層單元的j 的加權輸入為
該單元的實際輸出為
而隱含層單元i 的加權輸入為
該單元的實際輸出為
函數f 為可微分遞減函數
其演算法描述如下:
(1)初始化網路及學習參數,如設置網路初始權矩陣、學習因子等。
(2)提供訓練模式,訓練網路,直到滿足學習要求。
(3)前向傳播過程:對給定訓練模式輸入,計算網路的輸出模式,並與期望模式比較,若有誤差,則執行(4);否則,返回(2)。
(4)後向傳播過程:a. 計算同一層單元的誤差;b. 修正權值和閾值;c. 返回(2)
二、 BP 網路隱層個數的選擇
對於含有一個隱層的三層BP 網路可以實現輸入到輸出的任何非線性映射。增加網路隱層數可以降低誤差,提高精度,但同時也使網路復雜化,增加網路的訓練時間。誤差精度的提高也可以通過增加隱層結點數來實現。一般情況下,應優先考慮增加隱含層的結點數。
三、隱含層神經元個數的選擇
當用神經網路實現網路映射時,隱含層神經元個數直接影響著神經網路的學習能力和歸納能力。隱含層神經元數目較少時,網路每次學習的時間較短,但有可能因為學習不足導致網路無法記住全部學習內容;隱含層神經元數目較大時,學習能力增強,網路每次學習的時間較長,網路的存儲容量隨之變大,導致網路對未知輸入的歸納能力下降,因為對隱含層神經元個數的選擇尚無理論上的指導,一般憑經驗確定。
四、神經網路圖像識別系統
人工神經網路方法實現模式識別,可處理一些環境信息十分復雜,背景知識不清楚,推理規則不明確的問題,允許樣品有較大的缺損、畸變,神經網路方法的缺點是其模型在不斷豐富完善中,目前能識別的模式類還不夠多,神經網路方法允許樣品有較大的缺損和畸變,其運行速度快,自適應性能好,具有較高的解析度。
神經網路的圖像識別系統是神經網路模式識別系統的一種,原理是一致的空改。一般神經網路圖像識別系統由預處理,特徵提取和神經網路分類器組成。預處理就是將原始數據中的無用信息刪除,平滑,二值化和進行幅度歸一化等。神經網路圖像識別系統中的特徵提取部分不一定存在,這樣就分為兩大類:① 有特徵提取部分的:這一類系統實際上是傳統方法與神經網路方法技術的結合,這種方法可以充分利用人的經驗來獲取模式特徵以及神經網路分類能力來識別目標圖像。特徵提取必須能反應整個圖像的特徵。但它的抗干擾能力不如第2類。② 無特徵提取部分的:省去特徵抽取,整副圖像直接作為神經網路的輸入,這種方式下,系統的神經網路結構的復雜度大大增加了,輸入模式維數的增加導致了網路規模的龐大。此外,神經網路結構需要完全自己消除模式變形的影響。但是網路的抗干擾性能好,識別率高。
當BP 網用於分類時,首先要選擇各類的樣斗彎判本進行訓練,每類樣本的個數要近似相等。其原因在於一方面防止訓練後網路對樣本多的類別響應過於敏感,而對樣本數少的類別不敏感。另一方面可以大幅度提高訓練速度,避免網路陷入局部最小點。
由於BP 網路不具有不變識別的能力,所以要使網路對模式的平移、旋轉、伸縮具有不變性,要盡可能選擇各種可能情況的樣本。例如要選擇不同姿態、不同方位、不同角度、不同背景等有代表性的樣本,這樣可以保證網路有較高的識別率。
構造神經網路分類器首先要選擇適當的網路結構:神經網路分類器的輸入就是圖像的特徵向量;神經網路分類器的輸出節點應該是類別數。隱層數要選好,每層神經元數要合適,目前有很多採用一層隱層的網路結構。然後要選擇適當的學習演算法,這樣才會有很好的識別效果。在學習階段應該用大量的樣本進行訓練學習,通過樣本的大量學習對神經網路的各層網路的連接權值進行修正,使其對樣本有正確的識別結果,這就像人記數字一樣,網路中的神經元就像是人腦細胞,權值的改變就像是人腦細胞的相互作用的改變,神經網路在樣本學習中就像人記數字一樣,學習樣本時的網路權值調整就相當於人記住各個數字的形象,網路權值就是網路記住的內容,網路學習階段就像人由不認識數字到認識數字反復學習過程是一樣的。神經網路是按整個特徵向量的整體來記憶圖像的,只要大多數特徵符合曾學習過的樣本就可識別為同一類別,所以當樣本存在較大雜訊時神經網路分類器仍可正確識別。在圖像識別階段,只要將圖像的點陣向量作為神經網路分類器的輸入,經過網路的計算,分類器的輸出就是識別結果。
五、模擬實驗
1、實驗對象
本實驗用MATLAB 完成了對神經網路的訓練和圖像識別模擬。從實驗資料庫中選擇0~9 這十個數字的BMP 格式的目標圖像。圖像大小為16×8 像素,每個目標圖像分別加10%、20%、30%、40%、50%大小的隨機雜訊,共產生60 個圖像樣本。將樣本分為兩個部分,一部分用於訓練,另一部分用於測試。實驗中用於訓練的樣本為40個,用於測試的樣本為20 個。隨機雜訊調用函數randn(m,n)產生。
2、網路結構
本試驗採用三層的BP 網路,輸入層神經元個數等於樣本圖像的象素個數16×8 個。隱含層選24 個神經元,這是在試驗中試出的較理想的隱層結點數。輸出層神經元個數就是要識別的模式數目,此例中有10 個模式,所以輸出層神經元選擇10 個,10 個神經元與10 個模式一一對應。
3、基於MATLAB 語言的網路訓練與模擬
建立並初始化網路
1
2
3
4
5
6
7
8
% ================
S1 = 24;% 隱層神經元數目S1 選為24
[R,Q] = size(numdata);
[S2,Q] = size(targets);
F = numdata;
P=double(F);
net = newff(minmax(P),[S1 S2],{'logsig'
'logsig'},'traingda','learngdm')
這里numdata 為訓練樣本矩陣,大小為128×40, targets 為對應的目標輸出矩陣,大小為10×40。
newff(PR,[S1 S2…SN],{TF1 TF2…TFN},BTF,BLF,PF)為MATLAB 函數庫中建立一個N 層
前向BP 網路的函數,函數的自變數PR 表示網路輸入矢量取值范圍的矩陣[Pmin max];S1~SN 為各層神經元的個數;TF1~TFN 用於指定各層神經元的傳遞函數;BTF 用於指定網路的訓練函數;BLF 用於指定權值和閥值的學習函數;PF 用於指定網路的性能函數,預設值為『mse』。
設置訓練參數
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
net.performFcn = 'sse'; %平方和誤差
性能函數
net.trainParam.goal = 0.1; %平方和誤
差目標
net.trainParam.show = 20; %進程顯示
頻率
net.trainParam.epochs = 5000;%最大訓
練步數
net.trainParam.mc = 0.95; %動量常數
網路訓練
net=init(net);%初始化網路
[net,tr] = train(net,P,T);%網路訓練
對訓練好的網路進行模擬
D=sim(net,P);
A = sim(net,B);
B 為測試樣本向量集,128×20 的點陣。D 為網路對訓練樣本的識別結果,A 為測試樣本的網路識別結果。實驗結果表明:網路對訓練樣本和對測試樣本的識別率均為100%。如圖為64579五個數字添加50%隨機雜訊後網路的識別結果。
六、總結
從上述的試驗中已經可以看出,採用神經網路識別是切實可行的,給出的例子只是簡單的數字識別實驗,要想在網路模式下識別復雜的目標圖像則需要降低網路規模,增加識別能力,原理是一樣的。
Ⅱ 關於卷積神經網路對一維信號的特徵提取問題
你好,對信號的特徵提取在數學上看其實就是做一個濾波的運算,實際上都是通過卷積來實現的。下面是一個matlab的實現:
function r= my_conv(a, b)
m=length(a);
n=length(b);
r=zeros(1, m+n-1);
for k = 1:m
c = a(k)*b;
d = r(1, k:k+n-1);
d = d+c;
r(1, k:k+n-1) = d;
end
Ⅲ 用卷積神經網路提取圖像特徵
前面講到的都是基於知識的圖像特徵提取方法,除此之外還有另一條技術路線——基於深度學習的圖像特徵提取。
人在認知圖像時是分層抽象的,首先理解的是顏色和亮度,然後是邊緣、角點、直線等局部細節特徵,接下來是紋理、幾何形狀等更復雜的信息和結構,最後形成整個物體的概念。
視覺神經科學(Visual Neuroscience)對於視覺機理的研究驗證了這一結論,動物大腦的視覺皮層具有分層結構。眼睛將看到的景象成像在視網膜上,視網膜把光學信號轉換成電信號,傳遞到大腦的視覺皮層(Visual cortex),視覺皮層是大腦中負責處理視覺信號的部分。1959年,David和Wiesel進行了一次實驗,他們在貓的大腦初級視覺皮層內插入電極,在貓的眼前展示各種形狀、空間位置、角度的光帶,然後測量貓大腦神經元放出的電信號。實驗發現,不同的宏盯神經元對各種空間位置和方向偏好不同。這一成果後來讓他們獲得了諾貝爾獎。
目前已經證明,視覺皮層具有層次結構。從視網膜傳來的信號首先到達初級視覺皮層(primary visual cortex),即V1皮層。V1皮層簡單神經元對一些細節、特定方向的圖像信號敏感。V1皮層處理之後,將信號傳導到V2皮層。V2皮層將邊緣和輪廓信息表示成簡單形狀,然後由V4皮層中的神經元進行處理,它顏色信息敏感。復雜物體最終在IT皮層(inferior temporal cortex)被表示出來。
卷積神經網路可以看成是上面這種機制的簡單模仿。它由多個卷積層構成,每個卷積層包含多個卷積核,用這些卷積核從左向右、從上往下依次掃描整個圖像,得到稱為特徵圖(feature map)的輸出數據。網路前面的卷積層捕捉圖像局部、細節信息,有小的感受野,即輸出圖像的每個像素只利用輸入圖像很小的一個范圍。後面的卷積層感受野逐層加大,用於捕獲圖猜絕岩像更復雜,更抽象的信息。經過多個卷積層的運算,最後得到圖像在各個不同尺度的抽象表示。
顧名思義,卷積層由一組卷積單元(又稱"卷積核")組成,可以把這些卷積單元理解為過濾器,每個過濾器都會提取一種特定的特徵,方法參見 圖像卷積 。
卷積層的過濾器負責從圖像中查找規律,過濾器越多則參數越多,這意味著卷積層的維度可能很穗御龐大。我們需要一種方法來降低維數,這就是卷積網路中的池化層(又名"下采樣層")所扮的角色。
池化主要有3種形式:一般池化,重疊池化和金字塔池化。
池化窗口的尺寸為n*n,一般情況下池化窗口都是正方形的。步長(stride)等於n。此時池化窗口之間是沒有重疊的。對於超出數字矩陣范圍的,只計算范圍內的或者范圍外的用0填充再計算。又可以分為最大值池化,均值池化。
池化窗口范圍內的最大值作為采樣的輸出值。
假如輸入是一個4×4矩陣,執行最大池化是一個2×2矩陣,每次滑動2步。執行過程非常簡單,把4×4的輸入拆分成不同的區域,把這些區域用不同顏色來標記。對於2×2的輸出,輸出的每個元素都是其對應顏色區域中的最大元素值。
普通均值池化就是將池化窗口范圍內的平均值作為采樣的輸出值。這種池化不如最大池化常用。
池化窗口之間有重疊。也就是步長大於等於1小於n,計算和一般池化是一樣的。
空間金字塔池化(Spatial Pyramid Pooling,簡稱SPP)可以將尺寸大小不一樣的圖片轉換為同樣的尺寸。
SPP首先把圖片看成1塊,對這1塊進行最大值池化,得到1個值,分成4塊,對這4塊分別進行最大值池化,得到4個值;分成16塊,對這16塊分別進行最大值池化,得到16個值,以此類推。這樣就可以保證對於不同尺寸的圖片而言,最終得到的值的個數是一樣的。因為是最大值池化,超出范圍的用不用0填充不會影響結果。
直接對原始圖像做卷積,會存在兩個問題。一是每次卷積後圖像(特徵圖)都會縮小,這樣卷不了幾次就沒了; 二是相比於圖片中間的點,圖片邊緣的點在卷積中被計算的次數很少,導致邊緣的信息易於丟失。
為了解決這個問題,我們可以採用填充的方法。我們每次卷積前,先給圖片周圍都補一圈空白,讓卷積之後圖片跟原來一樣大,同時,原來的邊緣也被計算了更多次。
比如,我們把(8,8)的圖片給補成(10,10),那麼經過(3,3)的filter之後,就是(8,8),沒有變。
能夠保證輸入的數據和輸出的數據具有相同的空間尺寸,假設零填充個數為p,卷積核為f * f,卷積核滑動步長為s,則p應設置為
假設原始輸入圖像為m * m,輸出圖像為n * n,零填充個數為p,卷積核為f * f,卷積核滑動步長為s,則輸出尺寸為
假設輸入圖像為(m,m,d),其中d為圖像深度(通道數),卷積核為f * f,卷積核個數為n,則weight個數為
bias個數:
池化層很少使用零填充。假設原始輸入圖像為m * m,輸出圖像為n * n,卷積核為f * f,卷積核滑動步長為s,則輸出尺寸為
Ⅳ 卷積神經網路(Convolutional Neural Networks, CNN)——更有效率地提取特徵
卷積神經網路(Convolutional Neural Networks, CNN)——更有效率地提取特徵
圖像識別問題本質上就是分類問題,比如我們要區分貓和狗,那麼我們就需要構建一個模型,將照片丟進去後,模型能輸出貓或者狗的概率有多大。在做圖像識別時首要的就是要提取圖片的特徵,那麼如何提取圖片的特徵呢?前面講到了前向全連接網路,我們可以嘗試用前向全連接網路提取。假設圖片的像素是100*100,如果如片是彩色的,每個像素都有RGB三種顏色的數值。因此,一張圖片是有一個三維向量構成的,一維是長100,一維是寬100,還有一維是R、G、B 3個通道(channels)。把這個三維向量拉直作為一個一維向量,長度就是100*100*3。
我們在區分一張圖片時,我們觀察的往往是圖片的局部的、最重要的特徵。 比如圖片上是一隻鳥,我們可能通過嘴巴、眼睛、爪子等就可以判斷出是一隻鳥了。因此,輸入層的每一個神經元沒有必要看圖片的全局,只需要看一個局部就行了。
在兩張不同的圖片上,同一個特徵區域可能處於不同位置。 比如鳥嘴的局部特徵區域在下面這兩張圖上就處在不同的位置上。那麼如何才能讓兩個不同的神經元在看到這兩個不同的感受野時,能產生一致的特徵值呢?
對上面的內容進行一個總結:
(1)我們設置一個局部感受野,假設感受野的大小為W*H*C,其中W表示感受野的寬度,H表示感受野的高度,C表示感受野的通道數。那麼對應的神經元的參數的個數就為:W*H*C個權值加1個偏置。在卷積神經網路中,我們稱這樣一個神經元為一個 濾波器(filter) 。
(3)我們通過滑動的方式讓感受野鋪滿整個圖片,假設圖片的尺寸是W1*H1*C,滑動步長為S,零填充的數量為P。假設感受野的個數是W2*H2,其中,
(4)我們讓所有感受野的觀測濾波器參數進行共享,即相當於一個濾波器通過滑動掃描的方式掃描了所有感受野。
(5)我們設置多個濾波器,假設濾波器的個數為K,這K個濾波器都通過滑動掃描的方式掃過整個圖片。此時參數的個數為:(W*H*C+1)*K。
(6)由於每個濾波器每經過一個感受野都會進行一次計算輸出一個值,所以輸出的維度為:W2*H2*K。我們將這個輸出稱為特徵圖,所以特徵圖寬度為W2,高度為H2,通道數C2=K。
舉個例子: 假設某個圖片的大小是100*100*3,設置濾波器的大小為3*3*3,濾波器的個數為64,設置步長S=1,設置零填充的數量為P=0。那麼卷積神經網路的參數為, 相比前向全連接 個參數,參數的個數縮小了幾個數量級。
輸出特徵圖的寬度和高度均為, 輸出特徵圖的通道數為, 所以輸出特徵圖的維度為98*98*64。
如果在上面輸出的基礎上再疊加一層卷積神經網路,濾波器的設置寬和高可以不變,但是通道數不再是3了,而是變成64了,因為輸入特徵圖的通道數已經變64了。假設濾波器的大小為3*3*64,濾波器的個數為32,設置步長S=1,設置零填充的數量為P=0。可以計算出來,新的輸出特徵圖的維度是96*96*32。
以上就是卷積神經網路(CNN)的解析。但是CNN一般不是單獨用的,因為一般提取圖片的特徵是為了分類,還需要進一步處理,常見的形式如下圖所示。
Ⅳ Keras快速構建神經網路模型
用Keras搭建神經網路的步驟:
深度學習框架Keras——像搭積木般構建神經網路,主要分為7個部分,每個部分只需要幾個keras API函數就能實現,用戶即可像搭積木般一層層構建神經網路模型。
1. 創建模型 Create model
2. 添加層級 Add Layer
3. 模型編譯 Compile
4. 數據填充 Fit
5. 模型評估 Evaluate
6. 模型預測 Predict
7. 模型保存 Save model
下面章節會對每一部分具體來介紹。。。
Keras 中主要有三類模型:Sequential model, Functional model, Subclass model
在開始創建模型之前,首先需要引入tensorflow和keras模塊,然後再創建一個Sequential model
Sequential API定義如下:
layers參數可以為空, 然後通過add method向模型中添加layer,相對應的通過pop method移除模型中layer。
創建Function API模型,可以調用Keras.Model來指定多輸入多數出。
Keras.Model定義:
Layers是神經網路基本構建塊。一個Layer包含了tensor-in/tensor-out的計算方法和一些狀態,並保存在TensorFlow變數中(即layers的權重weights)。
Layers主要分為6個類別,基礎層,核心層,卷基層,池化層,循環層,融合層。
對派生類的實現可以用以下方法:
** init (): 定義layer的屬性,創建layer的靜態變數。
** build(self, input_shape): 創建依賴於輸入的變數,可以調用add_weight()。
** call(self, *args, **kwargs): 在確保已調用build()之後,在 call 中調用。
** get_config(self): 返回包含用於初始化此層的配置的字典類型。
創建SimpleDense派生類,在build()函數里添加trainable weights。實現y=input*w +b
結果輸出:
創建ComputeSum派生類,在 init 函數里添加 non-trainable weights。實現輸入矩陣沿軸0元素相加後,x=x+self.total
結果輸出:
核心層是最常用的層,涉及到數據的轉換和處理的時候都會用到這些層。
Dense層就是所謂的全連接神經網路層,簡稱全連接層。全連接層中的每個神經元與其前一層的所有神經元進行全連接。
Dense 實現以下操作: output = activation(dot(input, kernel) + bias) 其中 activation 是按逐個元素計算的激活函數,kernel 是由網路層創建的權值矩陣,以及 bias 是其創建的偏置向量 (只在 use_bias 為 True 時才有用)。
將激活函數應用於輸出。輸入信號進入神經元後進行的運算處理。
sigmoid、tanh、ReLU、softplus的對比曲線如下圖所示:
激活函數可以通過設置單獨的激活層Activation實現,也可以在構造層對象時通過傳遞 activation 參數實現:
Dropout在訓練中每次更新時,將輸入單元的按比率隨機設置為0,這有助於防止過擬合。未設置為0的輸入將按1 /(1-rate)放大,以使所有輸入的總和不變。
請注意,僅當訓練設置為True時才應用Dropout層,以便在推理過程中不會丟棄任何值。 使用model.fit時,訓練將自動適當地設置為True。
將輸入展平。不影響批量大小。注意:如果輸入的形狀是(batch,)沒有特徵軸,則展平會增加通道尺寸,而輸出的形狀是(batch, 1)。
將輸入重新調整為特定的尺寸
將任意表達式封裝為Layer對象。在Lambda層,以便在構造模型時可以使用任意TensorFlow函數。 Lambda層最適合簡單操作或快速實驗。 Lambda層是通過序列化Python位元組碼來保存的。
使用覆蓋值覆蓋序列,以跳過時間步。
對於輸入張量的每一個時間步(張量的第一個維度),如果所有時間步中輸入張量的值與mask_value相等,則將在所有下游層中屏蔽(跳過)該時間步。如果任何下游層不支持覆蓋但仍然收到此類輸入覆蓋信息,會引發異常。
舉例說明:
Embedding 是一個將離散變數轉為連續向量表示的一個方式。該層只能用作模型中的第一層。
Embedding 有以下3個主要目的: 在 embedding 空間中查找最近鄰,這可以很好的用於根據用戶的興趣來進行推薦。 作為監督性學習任務的輸入。 用於可視化不同離散變數之間的關系.
舉例說明:
輸出結果:
由維基網路的介紹我們可以得知,卷積是一種定義在兩個函數(𝑓跟𝑔)上的數學操作,旨在產生一個新的函數。那麼𝑓和𝑔的卷積就可以寫成𝑓∗𝑔,數學定義如下:
對應到不同方面,卷積可以有不同的解釋:𝑔 既可以看作我們在深度學習里常說的核(Kernel),也可以對應到信號處理中的濾波器(Filter)。而 𝑓 可以是我們所說的機器學習中的特徵(Feature),也可以是信號處理中的信號(Signal)。f和g的卷積 (𝑓∗𝑔)就可以看作是對𝑓的加權求和。
一維時域卷積操作:
二維圖像卷積操作:
卷積運算的目的是提取輸入的不同特徵,第一層卷積層可能只能提取一些低級的特徵如邊緣、線條和角等層級,更多層的網路能從低級特徵中迭代提取更復雜的特徵。
一維卷積層(即時域卷積),用以在一維輸入信號上進行鄰域濾波。
舉例說明:
結果輸出:
2D 卷積層 (例如對圖像的空間卷積)。
舉例說明:
結果輸出:
3D卷積層(例如體積上的空間卷積)
舉例說明:
結果輸出:
深度可分離1D卷積。該層執行分別作用在通道上的深度卷積,然後是混合通道的逐點卷積。 如果use_bias為True並提供了一個偏差初始值設定項,則它將偏差向量添加到輸出中。 然後,它可選地應用激活函數以產生最終輸出。
深度可分離的2D卷積。可分離的卷積包括首先執行深度空間卷積(它分別作用於每個輸入通道),然後是點向卷積,它將混合所得的輸出通道。 depth_multiplier參數控制在深度步驟中每個輸入通道生成多少個輸出通道。
直觀上,可分離的卷積可以理解為將卷積內核分解為兩個較小內核的一種方式,或者是Inception塊的一種極端版本。
轉置卷積層 (有時被成為反卷積)。對轉置卷積的需求一般來自希望使用 與正常卷積相反方向的變換,將具有卷積輸出尺寸的東西 轉換為具有卷積輸入尺寸的東西, 同時保持與所述卷積相容的連通性模式。
池化層是模仿人的視覺系統對數據進行降維,用更高層次的特徵表示圖像。實施池化的目的:降低信息冗餘;提升模型的尺度不變性、旋轉不變性。 防止過擬合。
通常有最大池化層,平均池化層。
池化層有三種形態:1D 用於一維數據,2D 一般用於二維圖像數據,3D 帶時間序列數據的圖像數據
循環神經網路(Recurrent Neural Network, 簡稱 RNN),循環神經網路的提出便是基於記憶模型的想法,期望網路能夠記住前面出現的特徵,並依據特徵推斷後面的結果,而且整體的網路結構不斷循環,因此得名為循環神經網路。
長短期記憶網路(Long-Short Term Memory, LSTM )論文首次發表於1997年。由於獨特的設計結構,LSTM適合於處理和預測時間序列中間隔和延遲非常長的重要事件。
舉例說明:
結果輸出:
GRU 門控循環單元- Cho et al. 2014.
在LSTM中引入了三個門函數:輸入門、遺忘門和輸出門來控制輸入值、記憶值和輸出值。而在GRU模型中只有兩個門:分別是更新門和重置門。與LSTM相比,GRU內部少了一個」門控「,參數比LSTM少,但是卻也能夠達到與LSTM相當的功能。考慮到硬體的計算能力和時間成本,因而很多時候我們也就會選擇更加」實用「的GRU。
舉例說明:
結果輸出:
循環神經網路層基類。
關於指定 RNN 初始狀態的說明
您可以通過使用關鍵字參數 initial_state 調用它們來符號化地指定 RNN 層的初始狀態。 initial_state 的值應該是表示 RNN 層初始狀態的張量或張量列表。
可以通過調用帶有關鍵字參數 states 的 reset_states 方法來數字化地指定 RNN 層的初始狀態。 states 的值應該是一個代表 RNN 層初始狀態的 Numpy 數組或者 Numpy 數組列表。
關於給 RNN 傳遞外部常量的說明
可以使用 RNN. call (以及 RNN.call)的 constants 關鍵字參數將「外部」常量傳遞給單元。 這要求 cell.call 方法接受相同的關鍵字參數 constants。 這些常數可用於調節附加靜態輸入(不隨時間變化)上的單元轉換,也可用於注意力機制。
舉例說明:
在訓練模型之前,我們需要配置學習過程,這是通過compile方法完成的。
他接收三個參數:優化器 opt
Ⅵ 神經網路提取圖像的概率分布特徵
神經網路提取圖像的概率分布特徵:
由於一個映射面上的神經元共享權值,因而減少了網路自由參數的個數,降低了網路參數選擇的復雜度。卷積神經網路中的每一個特徵提取層(C-層)都緊跟著一個用來求局部平均與二次提取的計算層(S-層),這種特有的兩次特徵提取結構使網路在識別時對輸入樣本有較高的畸變容忍能力。
神經網路特點:
例如實現圖像識別時,只在先把許多不同的圖像樣板和對應的應識別的結果輸入人工神經網路,網路就會通過自學習功能,慢慢學會識別類似的圖像。自學習功能對於預測有特別重要的意義。預期未來的人工神經網路計算機將為人類提供經濟預測、市場預測、效益預測,其應用前途是很遠大的。
Ⅶ 如何利用卷積神經網路提取圖像特徵
卷積神經網路有以下幾種應用可供研究: 1、基於卷積網路的形狀識別 物體的形狀是人的視覺系統分析和識別物體的基礎,幾何形狀是物體的本質特徵的表現,並具有平移、縮放和旋轉不變等特點,所以在模式識別領域,對於形狀的分析和識別具有十分重要的意義,而二維圖像作為三維圖像的特例以及組成部分,因此二維圖像的識別是三維圖像識別的基礎。 2、基於卷積網路的人臉檢測 卷積神經網路與傳統的人臉檢測方法不同,它是通過直接作用於輸入樣本,用樣本來訓練網路並最終實現檢測任務的。它是非參數型的人臉檢測方法,可以省去傳統方法中建模、參數估計以及參數檢驗、重建模型等的一系列復雜過程。本文針對圖像中任意大小、位置、姿勢、方向、膚色、面部表情和光照條件的人臉。 3、文字識別系統 在經典的模式識別中,一般是事先提取特徵。提取諸多特徵後,要對這些特徵進行相關性分析,找到最能代表字元的特徵,去掉對分類無關和自相關的特徵。然而,這些特徵的提取太過依賴人的經驗和主觀意識,提取到的特徵的不同對分類性能影響很大,甚至提取的特徵的順序也會影響最後的分類性能。同時,圖像預處理的好壞也會影響到提取的特徵。
Ⅷ 拼積木的大孩子們:搭建神經網路
第一次看到類比神經網路為樂高積木,是在《Neural Network for Natural Language Processing (自然語言處理中的神經網路)》裡面,當時真的有種醍醐灌頂,恍然大悟的感覺。
之前的一些實踐經驗,隱隱約約感覺用框架搭建網路有點像某種東西,但是卻說不出,一下子被點破,立刻有一種暢快感。
是的,就目前用深度學習來進行研究或開發,完全可以 把深度學習中的各種模塊,當做是樂高積木中的一塊塊積木 。你要做的就是根據任務要求,把這些基本模塊拼起來,只要孔對好了,整個拼出來的結構合理,模型就能夠跑。
現在各種深度學習框架的出現,使得這個特徵更加明顯。基本上每個框架都把一些基本的網路架構給模塊化了,直接拿出來用就行了。
如果具體一點的話,可以拿深度學習中主要的三種網路模塊來舉例,這三種分別是 MLP(多層感知機,也有很多其他叫法)、CNN(卷積神經網路)、RNN(循環神經網路) 。
現在就可以把這三種網路模塊,當做是三種不同的積木,比如說MLP是梯形積木,CNN是方塊形積木,RNN是條形積木。
如果還要再細分的話,這些大的模塊下面又有小的變種,如典型的RNN中就有LSTM和GRU這兩個拆運小兄弟。
這些模塊悉御鉛也都各自有著自己的特性,我們需要了解其特性,然後把他們從軍火庫中拿出來,放到合適的位置上去,組裝起來就可以得到自己的架構和模型。
既然有了這些積木,那麼這些積木與積木之睜好間當然也得有孔洞才能夠互相連接。那麼什麼是孔洞呢?
就是 各個模塊的輸入與輸出的形狀 ,只要前一個模塊的輸出和後一個模塊的輸入吻合,整個架構就可以跑起來,結果好不好先不說。
往往剛學習搭建網路時,最常碰上的問題就是,相鄰的模塊之間的輸入與輸出形狀不吻合(not match)。所以我建議可以在旁邊加註釋,現在的輸入輸出形狀怎麼樣了,是否吻合,很有幫助的。
連接好了之後呢,雖然有了一個模型,但還沒有訓練,這樣沒訓練的模型也並沒有什麼用。那是不是需要自己把這個模型的運算方程寫出來,然後再分別求偏導,之後利用反向傳播更新呢?
如果是這樣子的話,那麼可能就只會有數學狂人才會來研究深度學習了。
所幸的是,因為有了 計算圖(Computational Graph) 這項偉大的技術,所以現在反向傳播訓練非常便利,基本上已經全自動化了,直接把模型和數據丟給它們去訓練就好了。
來舉實際的例子。
比如任務是物體檢測的話,我們怎麼搭建模型呢。粗暴點說就是,在前面使勁堆CNN型積木,最後再加上MLP型積木,然後整個模型就好了。
還有現在挺火的VQA(視覺問答),看它的基線模型的話就是,對於圖片用CNN型積木先堆成一塊提取特徵,然後對於文本的問題就用RNN型積木提取特徵,之後兩個提取的特徵用叫做 融合模塊 的積木連接一下,最後加上MLP,就完成了。我們可以給新模型取名叫做 VQA基線模型 。
當然實際上還有很多對各個模塊的細調和小技巧,才能夠使得整個大模型獲得很好的性能。但這里就不累述了。
好玩的是,如果你用小模塊搭成了一個大模型,別人可以直接把你這個大模型拿過去,這邊卸掉一塊,那邊裝上一塊,再稍微調一調就有了自己的新模型。
對於一些上層直接應用的研究人員,如自然語言處理,還有計算機視覺來說,確實可以把這些模塊當成是積木塊來用。
那麼那些研究這些模塊的研究者們呢,可以把他們當做是積木創造者。他們對這些模塊裡面的小部件進行調節測試,創造出新的模塊,還有如何訓練,以及各種理論分析。往往很多進展都得從他們那兒得到啟示。
還有一點就是,可能大家也有疑問為什麼現在大概只有MLP、CNN以及RNN三大模塊,不多發明幾種模塊呢,最好像樂高積木一樣,各種各樣的。
事實上,這也是深度學習領域的研究人員在不斷探索著的。因為目前這三個模塊大家已經進行了很多研究,它們在有些問題上遇到一些困難,現在尚不能解決。
於是人們開始期望新的模型來進一步解決問題,所以就有最近自然語言處理的一些 Recursive Neural Network 的樹狀網路的探索,還有更進一步Hinton這樣的想要推出完全不同的模塊 Capsule 的。
還有一點要提的是,因為一直以來大家對這些模塊的內部具體的工作原理並不是很理解,所以 如何把這個黑箱打開 也是現在研究的重點之一。
Ⅸ 卷積神經網路的卷積層如何提取特徵
提取特徵不一定是分三層,覺得特徵值不夠好,可以增加卷積層。用於圖片識別只是一種,其根本理念是通過卷積神經網路提取特徵,圖片只是數據的一種,人臉識別根本也是一種圖片的比對,基本理念是對數據提取特徵進行學習。數據可以是圖片,聲音,視屏等等
Ⅹ 基於卷積神經網路的圖像識別演算法_卷積神經網路提取圖像特徵
圖象識別容易,因為圖象可以在一個時間點成像
而語音沒有可能在一個時間點的采樣有用,語音多出來一個時間軸
而這個時間軸引入的難題就是:換個時間,換個人,換個背景噪音,都變得沒法子識別了
目前,主流的大詞彙量語音識別系統多採用統計模式識別技術
典型的基於統計模式識別方法的語音識別系統由以下幾個基本模塊所構成信號處理及特徵提取模塊
該模塊的主要任務是從輸入信號中提取特轎猜征,供聲學模型處理
同時,它一般也包括了一些信號處理技術,以盡可能降低環境雜訊、信道、說話人等因素對特徵造成的影響
統計聲學模型
典型系統多採用基於一階隱馬爾科夫模型進行建模
發音詞典
發音詞典包含系統所能處理的詞彙集及其發音
發音詞典實際提供了聲學模型建模單元與語言模型建模單元間的映射
語言模型
語言模型對系統所針對的語言進行建模
理論上,包括正則語言,上下文無關文法在內的各種語言模型都可以作為語言模型,但目前各種系統普遍採用的還是基於統計的N元文法及其變體
解碼器
解碼器是語音識別系統的核心之一,其任務是對輸入的信號,根據聲學、語言模型及詞典,尋找能夠以最大概率輸出該信號的詞串
從數學角度可以更加清楚的了解上述模塊之間的關系
首先,統計語含慎音識別的最基本問題是,給定輸入信號或特徵序列,符號集(詞典),求解符閉老型號串使得:圖像識別比語音識別演算法的復雜度高多少倍