如何使用Keras TensorFlow指标如何使用Keras TensorFlow指标(How t

2019-05-12 02:58发布

似乎有对这个已经有几个线程/问题,但它不会出现,我认为这已经得到解决:

我如何使用keras模型中tensorflow度量函数?

https://github.com/fchollet/keras/issues/6050

https://github.com/fchollet/keras/issues/3230

人们似乎要么碰上周围变量初始化或度量为0的问题。

我需要计算不同细分指标,并希望包括tf.metric.mean_iou我Keras模型。 这是我已经能够拿出这么迄今为止最好的:

def mean_iou(y_true, y_pred):
   score, up_opt = tf.metrics.mean_iou(y_true, y_pred, NUM_CLASSES)
   K.get_session().run(tf.local_variables_initializer())
   return score

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

此代码不抛出任何错误,但总是mean_iou返回0。我相信这是因为up_opt未评估。 我已经看到了之前TF 1.3 人都建议使用沿着control_flow_ops.with_dependencies东西线([up_opt],分数)来实现这一目标。 这似乎并不可能在TF 1.3了。

总之,我怎么评价Keras 2.0.6 TF 1.3指标? 这似乎是一个很重要的特点。

Answer 1:

你仍然可以使用control_dependencies

def mean_iou(y_true, y_pred):
   score, up_opt = tf.metrics.mean_iou(y_true, y_pred, NUM_CLASSES)
   K.get_session().run(tf.local_variables_initializer())
   with tf.control_dependencies([up_opt]):
       score = tf.identity(score)
   return score


Answer 2:

有2个键来得到这个工作对我来说。 首先是使用

sess = tf.Session()
sess.run(tf.local_variables_initializer())

要使用TF功能(和编译)后初始化变量TF,但这样做之前model.fit() 你必须在你最初的例子,但大多数其他的例子表明tf.global_variables_initializer()它并没有为我工作。

我发现另一件事是op_update对象,它返回从许多TF度量元组的第二部分,是我们想要的。 另一部分似乎是0时TF度量与Keras使用。 所以,你的欠条指标应该是这样的:

def mean_iou(y_true, y_pred):
   return tf.metrics.mean_iou(y_true, y_pred, NUM_CLASSES)[1]

from keras import backend as K

K.get_session().run(tf.local_variables_initializer())

model.fit(...)


文章来源: How to use TensorFlow metrics in Keras