如何获得TensorFlow中tf.boolean_mask()获得的Tensor的形状?

时间:2016-09-20 02:10:12

标签: tensorflow

我想定义一个损失函数,它根据不同的条件计算损失。代码如下:

def calLoss2(logits, labels, augs, noaugs):
  augs = tf.cast(augs, tf.bool)
  noaugs = tf.cast(noaugs, tf.bool)
  noAugLogits = tf.boolean_mask(logits, noaugs)
  noAugLabels = tf.boolean_mask(labels, noaugs)
  augLogits = tf.boolean_mask(logits, augs)
  augLabels = tf.boolean_mask(labels, augs)
  noaugLoss = 0.0
  if augLabels.get_shape()[0] < BATCH_SIZE:
    noaugLoss = tf.reduce_mean(tf.nn.sparse_softmax_cross_entropy_with_logits(
        noAugLogits, noAugLabels)) * PENALTY_COEFFICIENT
  augLoss = tf.reduce_mean(
      tf.nn.sparse_softmax_cross_entropy_with_logits(augLogits, augLabels))
  return noaugLoss + augLoss

正如你所看到的,我想根据变量&#39; augs&#39;的第一个维度计算损失,我认为我可以使用 augLabels.get_shape()[0]来获得它的形状。 ]&lt; BATCH_SIZE 即可。但get_shape()[0]给出了一个&#39;?&#39;而不是它的第一个维度。但是,当我使用get_shape()来获取tf.boolean_mask()无法获得的张量形状时,它通常会给出正确的形状。

那么有人可以给我一些建议,如何获得由函数tf.boolean_mask()获得的张量的形状?

0 个答案:

没有答案