我需要帮助才能在keras中创建自定义指标。我需要计算我的错误等于零的次数(y_pred-y_true = 0)。
我尝试过:
tf.Tensor
但是我遇到了这个错误:
OperatorNotAllowedInGraphError:将
bool
用作Pythonc = 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);
});
})
});
答案 0 :(得分:0)
您不能在普通的tensorflow
中使用静态图运行Python比较。
您必须启用eager mode
,这是一个包装器,使您可以使用一些Python控制语句(例如if
或loop
)。只需按照错误提示装饰函数或在脚本开始处发出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和显式张量流会导致问题。