Sav*_*son 5 machine-learning neural-network deep-learning conv-neural-network tensorflow
from keras import layers
from keras import models
model = models.Sequential()
model.add(layers.Conv2D(32, (3, 3), activation='relu',
input_shape=(150, 150, 3)))
model.add(layers.MaxPooling2D((2, 2)))
model.add(layers.Conv2D(64, (3, 3), activation='relu'))
model.add(layers.MaxPooling2D((2, 2)))
model.add(layers.Conv2D(128, (3, 3), activation='relu'))
model.add(layers.MaxPooling2D((2, 2)))
model.add(layers.Conv2D(128, (3, 3), activation='relu'))
model.add(layers.MaxPooling2D((2, 2)))
model.add(layers.Flatten())
model.add(layers.Dense(512, activation='relu'))
model.add(layers.Dense(1, activation='sigmoid'))
Run Code Online (Sandbox Code Playgroud)
在阅读将图像分类为猫或狗的二元分类问题的代码时,在 Dense 层中,他们使用了 512 个单元。他们是怎么想出来的?是否有公式可以获取 Dense 层中的单元数。通常如果特征很多,我们会在 Dense 层中选择大量的单元。但是这里我们如何识别特征呢?我知道输出 Dense 层有一个单元作为它的二元分类问题,所以输出要么是0 或 1 通过 sigmoid 函数。
我对 CNN 的经验是最初从一个简单的模型开始并评估其性能。如果您达到了令人满意的训练和验证准确度水平,就到此为止。如果不尝试调整学习率之类的超参数以在向模型添加更多复杂性之前获得更好的性能。我发现使用可调学习率有助于提高模型性能。为此使用 Keras 回调 ReduceLROnPlateau。将其设置为监控验证准确性并在指定数量的 epoch 后未能改进时降低学习率。文档在这里。还可以使用 Keras 回调 ModelCheckpoint 来保存验证损失最低的模型。文档在这里。如果这些方法没有达到所需的训练精度水平,那么您可能希望通过向密集层添加更多节点或添加额外的密集层来增加模型复杂度。如果您的模型训练准确度高但验证准确度差,则您的模型可能过度拟合。在这种情况下,添加一个 dropout 层。文档在这里。给模型增加更多复杂性的问题是它倾向于过度拟合。因此,如果您增加密集层中的节点或添加额外的密集层并且验证准确性较差,则必须添加 dropout。此外,您可能需要考虑替代方法来控制像正则化器这样的拟合。文档是这里。对于您的具体示例,我认为您需要在密集层中有更多节点。首先尝试使用 64 个节点。
归档时间: |
|
查看次数: |
3874 次 |
最近记录: |