通过第二张量的组索引在张量中对Softmax进行分组

时间:2019-05-08 08:07:06

标签: tensorflow

我正在寻找一种方法来使张量x的部分按其组软最大,该组用x的每个元素存在的组索引y [i]表示。这是一些代码:

x = tf.constant([0.1, 0.2, 0.05, 0.3, 0.1, 0.3])
y = tf.constant([0, 0, 1, 1, 1, 1])

z = <some_operation>(x, y)       # -> softmax [0.1, 0.2] and softmax [0.05, 0.3, 0.1, 0.3]
                                 # -> outputs a tensor of shape [6]

重塑不是一种选择,因为要最大化处理的组具有不同的大小。

有什么想法吗?谢谢

1 个答案:

答案 0 :(得分:0)

该解决方案如何?计算的“手动方式”

x = tf.constant([0.1, 0.2, 0.05, 0.3, 0.1, 0.3])
y = tf.constant([0, 0, 1, 1, 1, 1])

es = tf.math.exp(x)
es_sums = tf.unsorted_segment_sum(data=es,
                                  segment_ids=y,
                                  num_segments=tf.math.reduce_max(y)+1)

es_sums = tf.gather(es_sums, y)
softmaxes = es / es_sums

with tf.Session() as s:
    print(s.run(softmaxes))         # [0.4750208  0.5249792  0.21648198 0.27796838 0.22758126 0.27796838]