Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 减少cnn的培训时间_Python_Python 3.x_Tensorflow_Keras_Conv Neural Network - Fatal编程技术网

Python 减少cnn的培训时间

Python 减少cnn的培训时间,python,python-3.x,tensorflow,keras,conv-neural-network,Python,Python 3.x,Tensorflow,Keras,Conv Neural Network,我正在努力改进下面的cnn架构。我用cnn进行图像分类。有人能建议对下面的架构进行任何更改,以减少培训时间,同时又不会失去太多的准确性吗 关于建筑的说明: 它有一个由16个滤波器组成的卷积层,利用3,3窗口处理神经网络的初始输入 其次是最大池层2,2 接下来,是与第一层大小相同的另一个卷积层,以便保留从前一层传递的数据 在前两层之后是第三个卷积层,包括32个过滤器,因为这允许网络开始查看更多细节并为更多数据打开空间 第三层生成一个全局平均池层,然后将该层馈送到完全连接的层 第一个完全连接的隐藏层

我正在努力改进下面的cnn架构。我用cnn进行图像分类。有人能建议对下面的架构进行任何更改,以减少培训时间,同时又不会失去太多的准确性吗

关于建筑的说明:

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

其次是最大池层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()

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

Conv2D(16, (3,3), input_shape=(224,224,3), activation = 'relu')
该层中有大小为3x3和16个滤波器的
(224-2)*(224-2)=49284
空间块,总共提供了近800k(准确地说是788544)的前向和后向传递卷积运算。这并没有考虑到你的批量大小

我建议您在第一层中使用,例如
strips=(2,2)
将使补丁数量减少4倍。此外,网络通过跨步进行下采样。这意味着您可以去掉下一个
MaxPooling2D
层,只需一个卷积层就可以获得相同的特征贴图大小


当然,网络会失去一些灵活性,但它不应该对准确性有太大影响。

您的图像相对较大(224x224x3),请尝试较小的尺寸,看看它对您的性能有多大影响。根据图像的不同,您也可以尝试事先将其转换为灰度。