提高CNN模型的准确性(停留在非常低的准确性)



以下是我的代码:用于CNN对图像识别的训练

python

# definiton of code
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))
*layer*
model.add(Flatten())
model.add(Dense(256))
*for activation*
model.add(LeakyReLU(alpha=0.1))
model.add(Dropout(0.5))

model.add(Dense(10))
*for activation*
model.add(LeakyReLU(alpha=0.1))
model.add(Activation("softmax"))

然后它坚持了下来,结果让我大吃一惊:

loss: 7.4918; acc: 0.1226. 

我一直在尝试更多的方法,但我不知道我应该为正确的道路做什么。

如果没有问题的详细信息,很难进行更多的调查。

但我鼓励你更多地研究:

  • BatchNormalization
  • 损失函数
  • 学习率
  • 优化器
  • 隐藏层

当前的技术状态是将卷积与批处理规范化和ReLU激活一起应用。订单应如下:

  1. 卷积
  2. 批量规范化
  3. ReLU(也可能是泄漏ReLU或任何其他激活(

所以你应该在卷积后添加BN,然后你也应该删除DropOut。许多研究人员已经研究过,如果使用BN,则不需要Dropout,并且BN实际上表现更好。

除此之外,你可能应该考虑学习率、过滤器数量等参数。

还要确保您使用了正确的损失和与您的损失相对应的输出激活。

最新更新