【问题标题】:Why sudden drop in accuracy but loss still decreasing?为什么准确率突然下降但损失仍在减少?
【发布时间】:2021-02-28 03:15:25
【问题描述】:

我正在使用 tensorflowkeras 来解决二元分类问题。

我只有 121 个样本,但有 20.000 个特征。我知道它的样本太少,特征太多,但这是一个生物学问题(基因表达数据),所以我必须处理它。

我的问题:为什么准确率(训练和测试)上升到 100%,然后下降,然后又上升。但是损失一直在减少?

准确度图:

验证图:

由于我的数据集只有 118 个大样本,我只有 24 个测试数据点。见confusion matrix

这是我的神经网络架构:

使用当前设置: {'ann__dropout_rate':0.4,'ann__learning_rate':0.01,'ann__n_neurons':16,'ann__num_hidden':1,'ann__regularization_rate':0.6}

model = Sequential()
model.add(Dense(input_shape, activation="relu",
                input_dim=input_shape))  # First Layer
model.add(Dense(n_neurons, activation="relu",
                kernel_regularizer=tf.keras.regularizers.l1(regularization_rate)))
model.add(Dropout(dropout_rate))
model.add(Dense(1, activation="sigmoid"))
optimizer = keras.optimizers.Adam(learning_rate=learning_rate)
model.compile(loss="binary_crossentropy",
              optimizer=optimizer, metrics=['accuracy'])
return model

谢谢!

【问题讨论】:

  • 只有几个样本 1000 个 epoch?你疯狂地过度拟合这些数据
  • 我知道。这就像一个测试,因为我想知道为什么准确性再次下降但损失仍在下降。 (也实施了 EarlyStopping)

标签: python tensorflow floating-accuracy


【解决方案1】:

我实现了您的@Gerry P 想法(Shuffle=true)和 ReduceLROnPlateau(批量大小为 64)。我现在的回调是:

reduce_lr = ReduceLROnPlateau(monitor='val_loss', factor=0.1, patience=5, min_lr=1e-6, verbose=1)

early_stop = EarlyStopping(monitor='val_loss', min_delta=0, patience=20, mode='auto')

我的 Accuracy accuracy 和 Loss loss 现在看起来像这样:

我会说它仍然过拟合。

混淆矩阵: Confusionmatrix

【讨论】:

    【解决方案2】:

    如果您还没有这样做,请尝试打乱您的训练数据。您也可以尝试更大的批量大小。我还建议在 model.fit 中使用 ReduceLROnPlateau 回调。文档是 here. 设置它以监控验证损失,如果在耐心时期后损失未能减少,则将学习率降低

    【讨论】:

    • 感谢您的帮助!你能解释一下为什么我会看到这种准确度曲线吗?
    • 根据图表看起来并没有过度拟合。过拟合的特征是训练损失继续减少而验证损失开始增加的状态。这通常发生在后期。
    • 同样只有 121 个样本,训练和测试数据出现显着波动也就不足为奇了。例如,如果您只有 10 个验证图像,那么检测中仅 1 个变化的差异就会使准确率下降 10%。
    猜你喜欢
    • 2020-04-20
    • 2018-05-17
    • 2019-11-24
    • 1970-01-01
    • 2019-02-10
    • 2022-01-22
    • 1970-01-01
    • 2020-03-15
    • 2019-12-06
    相关资源
    最近更新 更多