自定义指标Keras

时间:2019-11-07 13:36:31

标签: keras metrics

我需要帮助才能在keras中创建自定义指标。我需要计算我的错误等于零的次数(y_pred-y_true = 0)。

我尝试过:

tf.Tensor

但是我遇到了这个错误:

  

OperatorNotAllowedInGraphError:将bool用作Python c = tf.constant(0) def our_metric(y_true, y_pred): mask = K.equal(y_pred, y_true) # TRUE if y_pred = y_true mask = K.cast(mask,K.floatx()) s = K.sum(mask) return s/n_train   图形执行中不允许使用。使用急切执行或装饰   使用@ tf.function可以实现此功能。

编辑:使用此处提出的解决方案:

Creating custom conditional metric with Keras

我这样解决了我的问题:

   navigator.geolocation.getCurrentPosition(position => {
       this.$refs.gmap.$mapPromise.then(() => {
           let geocoder = new google.maps.Geocoder()
           let home = new google.maps.LatLng(position.coords.latitude, position.coords.longitude)
           geocoder.geocode({
               location: home
               }, 
          function(geocoderResults) {
              console.log('google result' , geocoderResults);
           });
       })
   });

2 个答案:

答案 0 :(得分:0)

您不能在普通的tensorflow中使用静态图运行Python比较。

您必须启用eager mode,这是一个包装器,使您可以使用一些Python控制语句(例如ifloop)。只需按照错误提示装饰函数或在脚本开始处发出tf.enable_eager_execution()

您可能还希望更新代码以使用tf2.0,它更直观并且默认情况下处于急切模式。

答案 1 :(得分:0)

有多种使用Keras后端函数来计算值等于零的次数的方法。您只需要在框外思考。这是一个示例:

diff = y_true - y_pred
count = K.sum(K.cast(K.equal(diff, K.zeros_like(diff)), 'int8'))

也可以使用tf.count_nonzero操作,但是混合使用keras和显式张量流会导致问题。