tensorflow - 如何使用 tensorflow tf.metrics.mean_iou?

标签 tensorflow deep-learning conv-neural-network

我正在尝试使用 tensorflow 的内置 mean_iou 函数来计算语义分割的 IoU 分数。

我的代码是:

#y_mask.shape == [batch_size, h * w, n_classes]
#y_mask.shape == [batch_size, h * w, n_classes]
iou = tf.metrics.mean_iou(tf.argmax(y_mask,2), tf.argmax(mask_,2), n_classes)

但是我收到以下错误跟踪:
tensorflow.python.framework.errors_impl.FailedPreconditionError: 

Attempting to use uninitialized value mean_iou/total_confusion
_matrix
         [[Node: mean_iou/AssignAdd = AssignAdd[T=DT_DOUBLE, _class=["loc:@mean_iou/total_confusion_matrix"], use_locking=false
, _device="/job:localhost/replica:0/task:0/cpu:0"](mean_iou/total_confusion_matrix, mean_iou/confusion_matrix/SparseTensorDense
Add)]]

Caused by op u'mean_iou/AssignAdd', defined at:
  File "sample_tf_ynet.py", line 207, in <module>
    trainSeg()
  File "sample_tf_ynet.py", line 166, in trainSeg
    iou, cm_op = tf.metrics.mean_iou(tf.argmax(y_mask,2), tf.argmax(mask_,2), n_classes)
  File "/home/meetshah1995/anaconda2/lib/python2.7/site-packages/tensorflow/python/ops/metrics_impl.py", line 782, in mean_iou
    update_op = state_ops.assign_add(total_cm, current_cm)
  File "/home/meetshah1995/anaconda2/lib/python2.7/site-packages/tensorflow/python/ops/gen_state_ops.py", line 75, in assign_ad
d
    use_locking=use_locking, name=name)
  File "/home/meetshah1995/anaconda2/lib/python2.7/site-packages/tensorflow/python/framework/op_def_library.py", line 763, in a
pply_op
    op_def=op_def)
  File "/home/meetshah1995/anaconda2/lib/python2.7/site-packages/tensorflow/python/framework/ops.py", line 2395, in create_op
    original_op=self._default_original_op, op_def=op_def)
  File "/home/meetshah1995/anaconda2/lib/python2.7/site-packages/tensorflow/python/framework/ops.py", line 1264, in __init__
    self._traceback = _extract_stack()

FailedPreconditionError (see above for traceback): Attempting to use uninitialized value mean_iou/total_confusion_matrix
         [[Node: mean_iou/AssignAdd = AssignAdd[T=DT_DOUBLE, _class=["loc:@mean_iou/total_confusion_matrix"], use_locking=false
, _device="/job:localhost/replica:0/task:0/cpu:0"](mean_iou/total_confusion_matrix, mean_iou/confusion_matrix/SparseTensorDense
Add)]]

请指导我正确使用 this 进行语义分割。

最佳答案

我通过调用解决了它

with tf.Session() as sess:

    sess.run(tf.global_variables_initializer())
    sess.run(tf.local_variables_initializer())

关于tensorflow - 如何使用 tensorflow tf.metrics.mean_iou?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42643288/

相关文章:

python - 如何在不丢失数据的情况下将数据转换为图像

python - Tensorflow 2.0.0-alpha0 : tf. logging.set_verbosity

Tensorflow,tf.nn.softmax_cross_entropy_with_logits 和 tf.nn.sparse_softmax_cross_entropy_with_logits 的区别

python - optim.lr_scheduler.ReduceLROnPlateau 给出错误值无法转换为 float 类型而不溢出 : inf

deep-learning - 如何在 Caffe 中沿 channel 拆分 Blob

neural-network - Keras 上的域适配

python - Keras 回调 ModelCheckpoint 不保存权重

python - Tensorflow:Tensordot 可重现的结果

python - 如何在 Tensorflow 中导入 keras.engine.topology?

python - 类型错误 : __call__() missing 1 required positional argument: 'inputs'