我有两个相似的张量;一个具有找到的所有有效框,另一个具有它们所属的所有索引。
Tensor("valid_boxes:0", shape=(?, 9), dtype=float32)
Tensor("valid_boxes_indexes:0", shape=(?, 4), dtype=int64)
我需要一个map_fun
来访问两个变量。我尝试过:
operation = tf.map_fn(lambda x: generate_bounding_box(x[0], x[1][1], x[1][0], x[1][2], grid_h, grid_w, anchors), (valid_boxes, valid_boxes_indexes))
Tensorflow给了我以下内容:
ValueError:这两个结构没有相同的嵌套结构。
第一个结构:type = tuple str =(tf.float32,tf.int64)
第二个结构:type = Tensor str = Tensor(“ map_14 / while / stack:0”, shape =(5,),dtype = float32)
更具体地说:子结构“ type = tuple str =(tf.float32, tf.int64)”是一个序列,而子结构“ type = Tensor str = Tensor(“ map_14 / while / stack:0”,shape =(5,),dtype = float32)“
有什么办法可以正确地做到这一点?
谢谢!
答案 0 :(得分:1)
当输入和输出值的结构不同时,您需要指定dtype
。来自tf.map_fn
的文档:
此外,
fn
可能会发出与其输入不同的结构。例如,fn
可能看起来像:fn = lambda t1: return (t1 + 1, t1 - 1)
。在这种情况下,dtype
参数不是可选的:dtype
必须是与fn
的输出匹配的类型或(可能是嵌套的)元组。
尝试一下:
operation = tf.map_fn(
lambda x: generate_bounding_box(x[0], x[1][1], x[1][0], x[1][2],
grid_h, grid_w, anchors),
(valid_boxes, valid_boxes_indexes)
dtype=tf.float32)