Tensorflow-SSD错误:TypeError: Can not convert a tuple into a Tensor or Operation.

错误表现:

WARNING:tensorflow:From ./eval_ssd_network.py:226: streaming_mean (from tensorflow.contrib.metrics.python.ops.metric_ops) is deprecated and will be removed in a future version.
Instructions for updating:
Please switch to tf.metrics.mean
INFO:tensorflow:Evaluating ./log/model.ckpt-40000
Traceback (most recent call last):
  File "./eval_ssd_network.py", line 346, in <module>
    tf.app.run()
  File "/home/ligy/anaconda3/envs/tensorflow/lib/python3.6/site-packages/tensorflow/python/platform/app.py", line 126, in run
    _sys.exit(main(argv))
  File "./eval_ssd_network.py", line 320, in main
    session_config=config)
  File "/home/ligy/anaconda3/envs/tensorflow/lib/python3.6/site-packages/tensorflow/contrib/slim/python/slim/evaluation.py", line 212, in evaluate_once
    config=session_config)
  File "/home/ligy/anaconda3/envs/tensorflow/lib/python3.6/site-packages/tensorflow/python/training/evaluation.py", line 188, in _evaluate_once
    eval_step_value = _get_latest_eval_step_value(eval_ops)
  File "/home/ligy/anaconda3/envs/tensorflow/lib/python3.6/site-packages/tensorflow/python/training/evaluation.py", line 76, in _get_latest_eval_step_value
    with ops.control_dependencies(update_ops):
  File "/home/ligy/anaconda3/envs/tensorflow/lib/python3.6/site-packages/tensorflow/python/framework/ops.py", line 5027, in control_dependencies
    return get_default_graph().control_dependencies(control_inputs)
  File "/home/ligy/anaconda3/envs/tensorflow/lib/python3.6/site-packages/tensorflow/python/framework/ops.py", line 4631, in control_dependencies
    c = self.as_graph_element(c)
  File "/home/ligy/anaconda3/envs/tensorflow/lib/python3.6/site-packages/tensorflow/python/framework/ops.py", line 3590, in as_graph_element
    return self._as_graph_element_locked(obj, allow_tensor, allow_operation)
  File "/home/ligy/anaconda3/envs/tensorflow/lib/python3.6/site-packages/tensorflow/python/framework/ops.py", line 3679, in _as_graph_element_locked
    types_str))
TypeError: Can not convert a tuple into a Tensor or Operation.

解决方法:

  • 第1步:在 eval_ssd_network.py 文件中 main函数 前添加一个flatten函数
def flatten(x):
    result = []
    for el in x:
         if isinstance(el, tuple):
               result.extend(flatten(el))
         else:
               result.append(el)
    return result
  • 第2步:替换关键代码 <共有两处eval_op=list(names_to_updates.values()) >
将    

eval_op=list(names_to_updates.values())
 
替换为  

eval_op=flatten(list(names_to_updates.values()))
 

测试:
再次运行,错误消失,程序跑通~


参考资料:
[1]. SSD输出mAP时出现TypeError: Can not convert a tuple into a Tensor or Operation
[2]. TypeError: Can not convert a tuple into a Tensor or Operation.

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值