我正在为推荐系统(项目推荐)进行多类分类,目前我正在使用sparse_categorical_crossentropy
loss训练我的网络。因此,通过监视我的验证丢失来执行EarlyStopping
是合理的,val_loss
tf.keras.callbacks.EarlyStopping(monitor='val_loss', patience=10)
这和预期的一样。然而,网络(推荐系统)的性能是通过平均精度-at-10来衡量的,并且在训练期间作为一项指标进行跟踪,如average_precision_at_k10
。因此,我还可以使用以下指标执行提前停止:
tf.keras.callbacks.EarlyStopping(monitor='average_precision_at_k10', patience=10)
这也和预期的一样有效
我的问题: 有时验证损失增加,而at-10的平均精度正在提高,反之亦然。因此,当且仅当两种情况都恶化时,我需要监控它们,并提前停止。我想做的是:
tf.keras.callbacks.EarlyStopping(monitor=['val_loss', 'average_precision_at_k10'], patience=10)
这显然不起作用。你知道怎么做吗
您可以通过创建自定义回调来实现这一点。下面的here.中提供了有关如何执行此操作的信息。下面是一些代码,说明了在自定义回调中可以执行的操作。我引用的文档显示了许多其他选项
我建议您创建自己的回调。 在接下来的部分中,我添加了一个解决方案,该解决方案可以监控精度和损失。您可以使用自己的度量值替换acc:
请记住,如果您想要控制监控数量的最小变化(又名.min_delta),您必须将其集成到代码中
以下是有关如何构建custome回调的文档:custom_callback
在上面Gerry P的指导下,我成功地创建了自己的自定义EarlyStopping回调,并认为我可以在这里发布它,以防其他人希望实现类似的功能
如果两个验证损失和在10时的平均精度没有改善
patience
个历元数,则执行提前停止然后将其用作:
相关问题 更多 >
编程相关推荐