Early stopping conditioned on metric `val_loss` which is not available. Available metrics are: loss,

问题:

tensorflow:Early stopping conditioned on metric val_loss which is not available. Available metrics are: loss,accuracy

解决办法


增加验证集大小,即可看见训练过程中loss,accuracy,val_loss和val_accuracy。

提醒:

笔者train_generator、test_generator、val_generator都是通过TFRecord把文件夹中分配好的数据集读取并按文件夹分类的categorical labels;

model.compile(loss='categorical_crossentropy',optimizer='adam', metrics=['accuracy'])

使用early_stopping时,笔者设置如下:

early_stopping = EarlyStopping(monitor='val_loss',patience=3)

early_stopping用法:

使用在模型训练过程中,在model.compile过程中设置使用,是防止训练模型过拟合,在模型不能继续优化迭代过程时自动停止模型训练并保留最佳模型。
其中主要参数有:
monitor是监督的指标,可以设置‘loss’, ‘val_loss’, ‘accuracy’, ‘val_accuracy’(我在博客中也看见有人出现了binary_accuracy,我想这个应该是和自己设置的metrics指标有关,同时也提醒大家注意自己metrics是否选择正确,这个也和自己labels类型有关)。

patience是你能容忍监督指标几次不按照优化过程该表。比如:monitor设置val_loss,patience=3,表示如果连续3次val_loss不减小(也就是变大了),就停止迭代。

min_delta是表示变化的幅度,这个需要根据你本身模型的准确度来设置,例如:如果你模型准确度已经有85%,那么可能你也不在乎1%的变化;但是如果我准确率仅有60%的情况下,增加1%也是不错的。

mode: 就’auto’, ‘min’, ‘,max’,我没有选择这个。

min_delta和patience都和“避免模型停止在抖动过程中”有关系,所以调节的时候需要互相协调。通常情况下,min_delta降低,那么patience可以适当减少;min_delta增加,那么patience需要适当延长;反之亦然。

我最开始跟着别的博主把monitor设置成loss,傻傻的训练了无数次的模型,都是训练完后再用测试集评价才知道模型还是过拟合了,还不知道为什么,反复问自己明明我用了early_stopping为什么还会过拟合。等我换成‘val_loss’,并把上面出现的val数据集过小的问题解决了以后,就能在每一次迭代过程中看见loss,accuracy,val_loss和val_accuracy四个指标值。不用傻傻等到最后还是错误的结果啦~~
修改前跑出来的样子(这就是验证集比例设置小了导致训练过程中只能看到loss和accuracy.):
在这里插入图片描述
修改后跑出来的样子(这样才能在训练过程中发现模型是否过拟合,要不要继续跑,early_stopping是否起作用了):在这里插入图片描述

  • 4
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值