目标

  • 我正在使用与YOLO类似的操作模式在TensorFlow中设计神经网络,即在图像上构建网格,并对网格中的每个单元格进行预测 .

  • 我有一组输入图像,每个图像的标签数量因图像而异 . 例如,第一个图像有5个标签,第二个图像有10个,第三个有2个,等等 . 我的神经网络的预测是以 (# images) x (# grid cells) x (5) 的形式投射的 .

  • 对于批处理中的每个图像,我选择与其各自标签位置对应的网格单元格(使用tf.gather) . 通过这种方式,我获得了包含相关对象的网格单元格 .

  • 然后我有一个损失函数,它增加给定图像中每个标签的损失,将其全部加到总损失中 .

问题

由于结构的不规则性(沿着每个维度的元素数量不同),我发现很难想出一种处理这种嵌套结构的方法 . 通常情况下,我似乎允许这样做(循环 None dims,切片等) .

可能的解决方案?

我试过的一些事情:

  • 使用tf.range在预测的第一个维度(图像数量)上运行简单而简单的循环,然后对输入进行切片(例如 slice = labels[i] 或类似) . 我后来得到各种各样的错误对我来说没有意义(就像 TypeError: Value passed to parameter 'begin' has DataType float32 not in list of allowed values: int32, int64 ,即使输入是 int32 ......) .

  • 使用tf.stack将各种输入张量组织成嵌套张量,将其传递到我的损失函数中,并使用tf.unstack循环遍历批处理中的每个图像 . TensorFlow引发了关于尺寸不相等的错误

  • 使用tf.scantf.map,循环嵌套张量的第一维(即批量图像) . 同样,我无法在第一时间构建嵌套张量

问题

如何正确处理 None 维度的嵌套结构?

Edit/Note :我知道如何使其仅适用于单个图像(即不在第一维上循环),因此任何解决方案都可以为批处理中的每个图像重复调用 calculate_loss_function(x, y, z) .