以下是我的代码,用于图像识别的CNN训练:
python
# 代码定义def make_model(): model = Sequential() model.add(Conv2D(16, (3,3),input_shape = (32,32,3), padding = "same", kernel_initializer="glorot_uniform")) model.add(LeakyReLU(alpha=0.1)) model.add(Conv2D(32, (3,3),input_shape = (32,32,3), padding = "same", kernel_initializer="glorot_uniform")) model.add(LeakyReLU(alpha=0.1)) model.add(MaxPooling2D(pool_size = (2,2),padding = "same")) model.add(Dropout(0.25))* model.add(Conv2D(32,(3,3), input_shape = (32,32,3), padding = "same")) model.add(LeakyReLU(alpha=0.1)) model.add(Conv2D(64, (3,3),input_shape = (32,32,3), padding = "same")) model.add(LeakyReLU(alpha=0.1)) model.add(MaxPooling2D(pool_size = (2,2),padding = "same")) model.add(Dropout(0.25)) *层* model.add(Flatten()) model.add(Dense(256)) *用于激活* model.add(LeakyReLU(alpha=0.1)) model.add(Dropout(0.5)) model.add(Dense(10)) *用于激活* model.add(LeakyReLU(alpha=0.1)) model.add(Activation("softmax"))
然后结果一直停滞不前,这让我感到非常困惑:
loss: 7.4918; acc: 0.1226.
我尝试了几种方法,但不知道正确的路径是什么。
回答:
当前最先进的技术是将卷积与批量归一化和ReLU激活函数结合使用。顺序应如下:
- 卷积
- 批量归一化
- ReLU(也可以是Leaky ReLU或其他任何激活函数)
因此,您应该在卷积之后添加批量归一化,然后删除Dropout。许多研究人员已经研究表明,如果使用批量归一化,则不需要Dropout,而且批量归一化的效果实际上更好。
除此之外,您可能还需要调整一些参数,比如学习率、滤波器数量等。
另外,请确保您使用了正确的损失函数和与损失函数对应的输出激活函数。