减少cnn的培训时间

2024-06-02 07:49:04 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在努力改进下面的cnn架构。我用cnn做图像分类。有人能建议对下面的体系结构进行任何修改,以减少培训时间而不损失太多的准确性吗?在

建筑说明:

它有16个滤波器的卷积层,利用3,3窗口处理神经网络的初始输入。在

接下来是2,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()

Tags: 数据fromimportaddmodelactivation卷积cnn
1条回答
网友
1楼 · 发布于 2024-06-02 07:49:04

大多数训练计算发生在第一层Conv2D层:

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

在这一层中有(224 - 2)*(224 - 2) = 49284大小的3x3和{}滤波器,它们总共为前向后向传递提供了近800k(确切地说是788544)的卷积运算。这还没有考虑到你的批量大小。在

我建议您在第一层使用striding,例如strides=(2, 2)将减少4倍的补丁数量。此外,网络执行跨步降采样。这意味着您可以去掉下一个MaxPooling2D层,只需要一个卷积层就可以得到相同的特征映射大小。在

当然,网络会失去一些灵活性,但不会对准确性造成太大影响。在

相关问题 更多 >