繁体   English   中英

为什么准确率突然下降但损失仍在减少?

[英]Why sudden drop in accuracy but loss still decreasing?

我正在使用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

谢谢!

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

我的准确和损失损失现在看起来像这样:

我会说它仍然过拟合。

混淆矩阵:混淆矩阵

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM