tf2.0中metrics原理

2020/4/5代码更新:
之前的F1代码在分布式训练过程中有问题,但问题不是出在我的metrics没有考虑分布式上(事实上,keras.metrics.Metric这个抽象类已经替我们考虑好了分布式的问题),而是代码写错了,正确的如下:

class F1_score(keras.metrics.Metric):
  def __init__(self, thresholds=0.5, name='f1', **kwargs):
    super(F1_score, self).__init__(name=name, **kwargs)
    self.tp = self.add_weight(name='tp', initializer='zeros')
    self.fp = self.add_weight(name='fp', initializer='zeros')
    self.fn = self.add_weight(name='fn', initializer='zeros')
    self.thresholds=thresholds

  def update_state(self, y_true, y_pred, sample_weight=None):
    
    y_pred=tf.cast(tf.where(y_pred>self.thresholds,1,0),tf.int8)
    y_true=tf.cast(y_true,tf.int8)
    
    tp=tf.math.count_nonzero(y_pred*y_true,dtype=tf.float32)
    fp=tf.math.count_nonzero(y_pred*(1-y_true),dtype=tf.float32)
    fn=tf.math.count_nonzero((1-y_pred)*y_true,dtype=tf.float32)
    
    self.tp.assign_add(tp)
    self.fp.assign_add
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值