提高 CNN 模型的准确性(停留在非常低的准确性)
Increase accuracy of CNN model (stuck at really low accuracy)
这是我的代码:用于图像识别的 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(也可能是leaky ReLu或任何其他激活)
所以你应该在你的卷积之后添加 BN,然后你也应该删除 DropOut。许多研究人员研究过,如果使用 BN,则不需要 Dropout,而且 BN 的性能实际上更好。
除此之外,您可能应该尝试使用学习率、过滤器数量等参数。
还要确保您使用的是正确的损失和与损失相对应的输出激活。
这是我的代码:用于图像识别的 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(也可能是leaky ReLu或任何其他激活)
所以你应该在你的卷积之后添加 BN,然后你也应该删除 DropOut。许多研究人员研究过,如果使用 BN,则不需要 Dropout,而且 BN 的性能实际上更好。
除此之外,您可能应该尝试使用学习率、过滤器数量等参数。
还要确保您使用的是正确的损失和与损失相对应的输出激活。