关于tf.tile和tf.pack

时间:2016-11-10 00:18:28

标签: tensorflow

我看到一个包含以下两行代码的程序

exponential_map = tf.exp(output_map)
sum_exp = tf.reduce_sum(exponential_map, 3, keep_dims=True)
tensor_sum_exp = tf.tile(sum_exp, tf.pack([1, 1, 1, tf.shape(output)[3]]))

output_map的形状为(1,255,255,2)。我可以看到sum_exp通常会将exponential_map的两个频道添加到一个频道中。因此sum_exp应该是(1,255,255,1)形状。但我对tensor_sum_exp = tf.tile(sum_exp, tf.pack([1, 1, 1, tf.shape(output)[3]]))的目标是什么感到困惑?

1 个答案:

答案 0 :(得分:0)

它沿着维度3创建了多个图像副本。

查找(dynaminc)输出通道数:

outchannels = tf.shape(output)[3]

然后它构建一个包含每个维度的倍数的张量:

multiples = tf.pack([1, 1, 1, outchanels])

并制作了许多副本:

tensor_sum_exp = tf.tile(sum_exp, multiples)

例如,如果您知道outchannels总是n,(检查sum_exp.get_shape()),您还可以:

tensor_sum_exp = tf.concat(3,[sum_exp]*n)