2017-10-11 103 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图层,并获得与卷积图层相同的特征图大小。

当然,网络将失去一定的灵活性,但它不应该影响精度那么多。