簡體   English   中英

減少CNN的培訓時間

[英]Reduce training time for cnn

我正在嘗試改善以下的cnn架構。 我正在使用cnn進行圖像分類。 任何人都可以建議對以下架構進行任何更改,以減少培訓時間而又不會降低准確性嗎?

關於架構的注意事項:

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

其次是最大池化層2,2

接下來是另一個卷積層,其大小與第一層相同,以保留從前一層傳遞過來的數據。

在前兩層之后的是第三卷積層,其中包括32個過濾器,因為這使網絡可以開始查看更多細節並為更多數據騰出空間。

第三層產生了全局平均池化層,然后將其饋送到完全連接的層中。

第一個完全連接的隱藏層使用了64個單位,因為這是我的估計,以便在輸出層之前為黃油分配足夠的空間,以便網絡確定權重。

緊隨其后的是Dropout層,以幫助防止過度擬合,然后最終將其傳遞給進行預測的輸出層。

輸出層具有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()

大部分訓練計算都在第一個Conv2D層中進行:

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

該層中有(224-2)*(224-2 (224 - 2)*(224 - 2) = 49284大小為3x3空間斑塊和16濾鏡,對於向前向后的遍歷,總共可以進行近800k(准確地說是788544)卷積操作。 而且這並未考慮您的批次大小。

我建議您做的是在第一層使用跨步 ,例如strides=(2, 2)將減少補丁數量4倍。 另外,網絡大步進行降采樣。 這意味着您可以擺脫下一個MaxPooling2D圖層,而只需一個卷積圖層就可以得到相同的要素地圖大小。

當然,網絡將失去一些靈活性,但它不會對准確性造成太大影響。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM