Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/assembly/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 为什么准确度突然下降,但损失仍在减少?_Python_Tensorflow_Floating Accuracy - Fatal编程技术网

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

Python 为什么准确度突然下降,但损失仍在减少?,python,tensorflow,floating-accuracy,Python,Tensorflow,Floating Accuracy,我使用tensorflow和keras来解决二元分类问题 我只有121个样本,但有20000个特征。我知道样本太少,特征太多,但这是一个生物学问题(基因表达数据),所以我必须处理它 我的问题:为什么准确度(训练和测试)会上升到100%,然后下降,然后再次上升。但损失一直在减少 精度图: 验证图: 因为我的数据集只有118个样本,所以我只有24个测试数据点。请参见混淆矩阵: 这是我的神经网络架构: 使用当前设置: {'ann_uu辍学率:'0.4',ann_u学习率:'0.01',ann_u

我使用tensorflow和keras来解决二元分类问题

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

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

精度图:

验证图:

因为我的数据集只有118个样本,所以我只有24个测试数据点。请参见混淆矩阵:

这是我的神经网络架构:

使用当前设置: {'ann_uu辍学率:'0.4',ann_u学习率:'0.01',ann_un_u神经元:'16',ann_unum_u隐藏率:'1',ann_u正则化率:'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中使用reducelRon回调。建立文档以监控验证损失,并通过一个因素降低学习率我实现了你的@Gerry p想法(Shuffle=true)和reducelRonplation(批量大小为64)。我的回电现在是:

reduce\u lr=reducelronplatform(监视器=val\u loss',系数=0.1,耐心=5,最小\u lr=1e-6,详细=1)

early\u stop=early stop(监视器='val\u loss',最小增量=0,耐心=20,模式='auto')

我的准确度和损失现在看起来如下:

我想说它还是太合适了

混淆矩阵:

1000个纪元,只需几个样本?你像我知道的那样过度拟合了这些数据。这就像一个测试,因为我想知道为什么准确率再次下降,但损失仍然在减少。(也实施了EarlyStopping)谢谢你的帮助!你能解释一下为什么我会看到这种精度曲线吗?根据图表,它看起来不像是过度拟合。过度拟合的特征是训练损失持续减少,而验证损失开始增加。这通常发生在以后的年代。同样,只有121个样本,在训练和测试数据中看到显著的波动也就不足为奇了。例如,如果您只有10个验证图像,则检测中仅1个变化的差异将使精度摆动10%。