TensorFlow:使用dim处理嵌套张量无

时间:2018-01-12 11:00:12

标签: python tensorflow

目标

  • 我正在使用与YOLO类似的操作模式在TensorFlow中设计神经网络,即在图像上构建网格,并对网格中的每个单元格进行预测。
  • 我有一组输入图像,每个图像的标签数量因图像而异。例如,第一个图像有5个标签,第二个图像有10个,第三个有2个,等等。我的神经网络的预测是以(# images) x (# grid cells) x (5)的形式投射的。
  • 对于批处理中的每个图像,我选择与其各自标签位置对应的网格单元格(使用tf.gather)。通过这种方式,我获得了包含相关对象的网格单元格。
  • 然后我有一个损失函数,它会增加给定图像中每个标签的损失,并将其全部添加到总损失中。

问题

由于结构的不规则性(沿着每个维度的元素数量不同),我发现很难想出一种处理这种嵌套结构的方法。通常情况下,我只是循环并切片NumPy数组直到作业完成,但TensorFlow似乎不允许这样做(循环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尺寸的嵌套结构?

编辑/注意:我知道如何使其仅适用于单个图像(即不在第一维上循环),因此任何解决方案都可以反复调用calculate_loss_function(x, y, z)批量中的每个图像。

0 个答案:

没有答案