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]
重塑不是一种选择,因为要最大化处理的组具有不同的大小。
有什么想法吗?谢谢
答案 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]