我看到一个包含以下两行代码的程序
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]]))
的目标是什么感到困惑?
答案 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)