栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

Keras回调EarlyStopping比较培训和验证损失

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Keras回调EarlyStopping比较培训和验证损失

您可以根据需要创建自定义回调类。

我创建了一个应该符合您的需求的文件:

class CustomEarlyStopping(Callback):    def __init__(self, ratio=0.0,      patience=0, verbose=0):        super(EarlyStopping, self).__init__()        self.ratio = ratio        self.patience = patience        self.verbose = verbose        self.wait = 0        self.stopped_epoch = 0        self.monitor_op = np.greater    def on_train_begin(self, logs=None):        self.wait = 0  # Allow instances to be re-used    def on_epoch_end(self, epoch, logs=None):        current_val = logs.get('val_loss')        current_train = logs.get('loss')        if current_val is None: warnings.warn('Early stopping requires %s available!' %    (self.monitor), RuntimeWarning)        # If ratio current_loss / current_val_loss > self.ratio        if self.monitor_op(np.divide(current_train,current_val),self.ratio): self.wait = 0        else: if self.wait >= self.patience:     self.stopped_epoch = epoch     self.model.stop_training = True self.wait += 1    def on_train_end(self, logs=None):        if self.stopped_epoch > 0 and self.verbose > 0: print('Epoch %05d: early stopping' % (self.stopped_epoch))

我冒昧地解释,你想阻止如果之间的比例

train_loss
validation_loss
在一定去
阈值。此比率参数应介于
0.0
和之间
1.0
。但是,这样做
1.0
很危险,因为验证损失和训练损失在训练开始时可能会以不稳定的方式波动很大。

您可以添加一个耐心参数,该参数将等待查看阈值是否在一定时期内保持不变。

使用此方法的方法例如:

callbacks = [CustomEarlyStopping(ratio=0.5, patience=2, verbose=1),  ... Other callbacks ...]...model.fit(..., callbacks=callbacks)

在这种情况下,如果训练损失保持低于

0.5*val_loss
2个纪元,它将停止。

这对您有帮助吗?



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/441260.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号