繁体   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