我被张量流度量平均值_iou()难住了。我尝试使用会导致相同数据的结果不一致,而且我在任何地方都找不到有用的示例。在
这篇博文讨论了这个问题。。。但我不能用这里的想法来解决我的问题。http://ronny.rest/blog/post_2017_09_11_tf_metrics/
最终目标是使用validation_func(y_true, y_pred)
作为参数'metric'传递给Keras模型.编译()方法。在
最终目标
像是。。。在
def my_iou(y_true, y_pred):
num_classes = 2
score, update_op = tf.metrics.mean_iou(tf.argmax(y_true, axis=3), tf.argmax(y_pred, axis=3), num_classes)
K.get_session().run(tf.local_variables_initializer())
# K.get_session().run(tf.global_variables_initializer())
with tf.control_dependencies([update_op]):
final_score = tf.identity(score)
return final_score
虚拟数据
我真正关心的是一班的借据。在这种情况下,应为7/9=0.778。但我希望这篇文章能说出的是每堂课的平均借据。。。在
数据
^{pr2}$如果我用下面这样的东西来模拟,大多数时候我得到预期的0.3889。。。但我偶尔也会得到3.5或0.0,我不知道为什么?在
results = []
for i in range(20):
with tf.Session() as sess:
y_t = tf.convert_to_tensor(y_true)
y_p = tf.convert_to_tensor(y_pred)
results.append(my_iou(y_t, y_p).eval())
最近的跑步
[0.3888889,
0.3888889,
0.3888889,
0.3888889,
3.5,
0.3888889,
0.3888889,
0.3888889,
0.3888889,
0.3888889,
0.3888889,
0.3888889,
0.3888889,
3.5,
0.3888889,
0.3888889,
0.3888889,
3.5,
0.3888889,
0.3888889]
有什么帮助吗?在
编辑
现在我使用的是硬编码的二进制分类,但我不喜欢它。不可概括,可能太简单,也可能完全错误。(同样值得注意的是。。。在这段代码中,类0是前景,与我的示例设置不同,类1是前景)
def my_iou_binary(self, y_true, y_pred):
yt0 = y_true[:,:,:,0]
yp0 = K.cast(y_pred[:,:,:,0] > 0.5, 'float32')
inter = tf.count_nonzero(tf.logical_and(tf.equal(yt0, 1), tf.equal(yp0, 1)))
union = tf.count_nonzero(tf.add(yt0, yp0))
iou = tf.where(tf.equal(union, 0), 1., tf.cast(inter/union, 'float32'))
return iou
目前没有回答
相关问题 更多 >
编程相关推荐