以下是我的代码:用于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激活一起应用。订单应如下:
- 卷积
- 批量规范化
- ReLU(也可能是泄漏ReLU或任何其他激活(
所以你应该在卷积后添加BN,然后你也应该删除DropOut。许多研究人员已经研究过,如果使用BN,则不需要Dropout,并且BN实际上表现更好。
除此之外,你可能应该考虑学习率、过滤器数量等参数。
还要确保您使用了正确的损失和与您的损失相对应的输出激活。