我尝试实施precision并recall作为自定义指标,如https://datascience.stackexchange.com/questions/45165/how-to-get-accuracy-f1-precision-and-recall-for-a-keras-model/45166#45166 ?newreg=6190503b2be14e8aa2c0069d0a52749e,但由于某种原因,这些数字是关闭的(我确实知道批次问题的平均值,这不是我要说的)。
所以我尝试实施另一个指标:
def p1(y_true, y_pred):
return K.sum(y_true)
Run Code Online (Sandbox Code Playgroud)
只是为了看看会发生什么......我希望看到一个直线图,其中1包含我的数据集中的's数量(我正在研究一个有binary_crossentropy损失的二元分类问题)。
因为 Keras 将自定义指标计算为每批结果的平均值,如果我有一个大小为 32 的批处理,我希望这个p1指标返回 16,但我得到了 15。如果我使用一个大小为 16 的批处理,我得到接近 7.9 的东西。那是我尝试使用该fit方法的时候。
我还在训练模型后手动计算了验证精度,它确实给了我一个与我val_precision从历史上看到的最后一个不同的数字。那是使用fir_generator,在这种情况下batch_size没有提供,所以我假设它一次计算整个验证数据集的度量。
另一个重要的细节是,当我使用相同的数据集进行训练和验证时,即使我在最后一个时期获得相同的真阳性和预测阳性的数字,训练和验证精度也不同(1 和 0.6)。
true_positives = K.sum(K.round(K.clip(y_true * y_pred, 0, 1)))
predicted_positives = K.sum(K.round(K.clip(y_pred, 0, 1)))
Run Code Online (Sandbox Code Playgroud)
显然 32.0 / (32.0 + K.epsilon()) = 0.6000000238418579
知道出了什么问题吗?
可能有帮助的东西:
def p1(y_true, y_pred):
true_positives = K.sum(K.round(K.clip(y_true * y_pred, 0, 1)))
return 1.0 / (true_positives …Run Code Online (Sandbox Code Playgroud)