2017-10-11 55 views
1

我在努力改進下面的cnn架構。我正在使用cnn進行圖像分類。任何人都可以建議對下面的體系結構進行任何更改,以減少訓練時間而不會失去太多的準確性?減少cnn的培訓時間

上建築注:

它具有利用3,3窗口處理的神經網絡的初始輸入16個濾波器卷積層。

它隨後與2,2-

接着一個最大池層,是另一種卷積層,其大小與第一層相同,以便保持這是通過從現有層傳遞的數據。

繼第一層2是第三卷積層爲包括過濾器32,因爲這允許對網絡開始尋找更多的細節和開闢空間更多的數據。

的第三層,得到那麼這將被饋送到完全連接的層的總體平均池層。

第一完全連接隱藏層利用了64個單位,因爲這是一個估計通過我以允許輸出層之前,黃油,得到網絡更多的空間來確定權重。

接着是降層,以防止過度擬合終於被傳遞到使預測輸出層之前。

輸出層具有SOFTMAX激活功能,其允許它保持數字0,1之間的概率分佈。

CNN代碼:

from keras.layers import Conv2D, MaxPooling2D, GlobalAveragePooling2D 
from keras.layers import Dropout, Flatten, Dense 
from keras.models import Sequential 

model = Sequential() 
model.add(Conv2D(16, (3,3), input_shape=(224,224,3), activation = 'relu')) 
model.add(MaxPooling2D(pool_size=(2,2))) 
model.add(Conv2D(16, (3,3), activation= 'relu')) 
model.add(MaxPooling2D(pool_size =(2,2))) 
model.add(Conv2D(32, (3,3), activation= 'relu')) 
model.add(GlobalAveragePooling2D()) 
model.add(Dense(units=64, activation= 'relu')) 
model.add(Dropout(0.3)) 
model.add(Dense(units= 133, activation = 'softmax')) 
model.summary() 
+0

您的圖片相對較大(224x224x3),嘗試較小的尺寸並查看它對您的表現有多大影響。根據圖像的不同,您可能也會嘗試事先將它們轉換爲灰度。 – aseipel

回答

1

絕大多數的訓練計算在第一Conv2D層發生的事情:

Conv2D(16, (3,3), input_shape=(224,224,3), activation = 'relu') 

(224 - 2)*(224 - 2) = 49284大小3x3的空間補丁和16過濾器在這一層,這在總共給出了幾乎800k(準確的說是788544)卷積操作,用於正向反向傳遞。這並沒有考慮到你的批量大小。

我建議你在第一層使用striding,例如strides=(2, 2)將會減少4次修補程序的次數。另外,網絡還跨步執行下采樣。這意味着您可以擺脫下一個MaxPooling2D圖層,並獲得與卷積圖層相同的特徵圖大小。

當然,網絡將失去一定的靈活性,但它不應該影響精度那麼多。