[英]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.