Tensorflow-迭代两个张量

时间:2018-11-14 16:13:51

标签: python tensorflow

我有两个相似的张量;一个具有找到的所有有效框,另一个具有它们所属的所有索引。

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)“

有什么办法可以正确地做到这一点?

谢谢!

1 个答案:

答案 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)