【问题标题】:How to solve the issue of fluctuations in validation accuracy?如何解决验证准确率波动的问题?
【发布时间】:2020-04-22 17:04:36
【问题描述】:

我尝试使用 SGD、Adadelta、Adabound、Adam。一切都给我验证准确性的波动。我尝试了 keras 中的所有激活函数,但我的 val_acc 仍然出现波动。
训练样本:1352
验证样本:339
Validation Accuracy

        # first (and only) CONV => RELU => POOL block
        inpt = Input(shape = input_shape)
        x = Conv2D(32, (3, 3), padding = "same")(inpt)
        x = Activation("swish")(x)
        x = BatchNormalization(axis = channel_dim)(x)
        x = MaxPooling2D(pool_size = (3, 3))(x)
        # x = Dropout(0.25)(x)

        # first CONV => RELU => CONV => RELU => POOL block
        x = Conv2D(64, (3, 3), padding = "same")(x)
        x = Activation("swish")(x)
        x = BatchNormalization(axis = channel_dim)(x)
        x = Conv2D(64, (3, 3), padding = "same")(x)
        x = Activation("swish")(x)
        x = BatchNormalization(axis = channel_dim)(x)
        x = MaxPooling2D(pool_size = (2, 2))(x)
        # x = Dropout(0.25)(x)

        # second CONV => RELU => CONV => RELU => POOL Block
        x = Conv2D(128, (3, 3), padding = "same")(x)
        x = Activation("swish")(x)
        x = BatchNormalization(axis = channel_dim)(x)
        x = Conv2D(128, (3, 3), padding = "same")(x)
        x = Activation("swish")(x)
        x = BatchNormalization(axis = channel_dim)(x)
        x = MaxPooling2D(pool_size = (2, 2))(x)
        # x = Dropout(0.25)(x)

        # first (and only) FC layer
        x = Flatten()(x) # Change to GlobalMaxPooling2D
        x = Dense(256, activation = 'swish')(x)
        x = BatchNormalization(axis = channel_dim)(x)
        x = Dropout(0.4)(x)

        x = Dense(128, activation = 'swish')(x)
        x = BatchNormalization()(x)
        x = Dropout(0.4)(x)

        x = Dense(64, activation = 'swish')(x)
        x = BatchNormalization()(x)
        x = Dropout(0.3)(x)

        x = Dense(32, activation = 'swish')(x)
        x = BatchNormalization()(x)

        x = Dense(nc, activation = 'softmax')(x)
        model  = Model(inputs=inpt, outputs = x)

model.compile(loss = 'categorical_crossentropy', optimizer = 'sgd', metrics = ['accuracy'])

【问题讨论】:

  • 请编辑您的问题以包括您要解决的问题、您正在执行的预处理类型。只看模型是不可能给出原因/答案的。
  • 我只是通过将图像除以 255 来归一化图像。没有使用其他预处理方法@thushv89

标签: validation machine-learning image-processing keras deep-learning


【解决方案1】:

您的模型可能对噪音过于敏感,请参阅answer

根据链接中的答案以及我从您的模型中看到的内容,您的网络可能对于您拥有的数据量来说太深了(大型模型且数据不足 ==> 过度拟合 ==> 噪声敏感性)。我建议使用更简单的模型作为健全性检查。

学习率也可能是一个可能的原因(如 Neb 所述)。您正在使用 sgd 的默认学习率(0.01,可能太高了)。尝试使用 1.e-3 或更低版本。

【讨论】:

  • 谢谢。减少层数并减少深度帮助我解决了这个问题。
猜你喜欢
  • 2022-01-05
  • 2021-12-17
  • 2012-12-06
  • 2022-01-15
  • 2018-07-20
  • 1970-01-01
  • 2023-03-17
  • 1970-01-01
  • 2020-04-27
相关资源
最近更新 更多