从Tensorflow中的概率分布计算平均状态

从Tensorflow中的概率分布计算平均状态,tensorflow,softmax,tensor,Tensorflow,Softmax,Tensor,我有3个状态(即状态是向量,在本例中向量长度是2),我有概率分布(例如10%状态1,60%状态2,30%状态3)。我想导出一个新的状态,它是概率*状态之和。当然,我也需要考虑批处理。 1> 计算出的概率分布,我有一批4,3种可能性,分布定义如下 dist = tf.constant([[0.1, 0.6, 0.3], [0.2, 0.4, 0.4], [0.3, 0.5, 0.2], [0.3, 0.6, 0.1]]) 2> 3种可能的状态(以及4个批次)。这是形状为[4,3,2]或[batc

我有3个状态(即状态是向量,在本例中向量长度是2),我有概率分布(例如10%状态1,60%状态2,30%状态3)。我想导出一个新的状态,它是概率*状态之和。当然,我也需要考虑批处理。

1> 计算出的概率分布,我有一批4,3种可能性,分布定义如下

dist = tf.constant([[0.1, 0.6, 0.3], [0.2, 0.4, 0.4], [0.3, 0.5, 0.2], [0.3, 0.6, 0.1]])
2> 3种可能的状态(以及4个批次)。这是形状为[4,3,2]或[batch,3可能状态,状态值]的张量

val = tf.constant([[[10.0, 5.0],[10, 5],[10,5]],[[8, 2],[8, 2],[8, 2]],[[7, 3],[9, 1],[6, 4]],[[1, 2],[3, 4],[5, 6]]])
我想得到[4,2]或[batch,state value]的张量。在这种情况下,该值应为

[
  [10*0.1 + 10*0.6 + 10*0.3, 5*0.1 + 5*0.6 + 5*0.3],
  [8*0.2 + 8*0.4 + 8*0.4, 2*0.2 + 2*0.4 + 2*0.4],
  [7*0.3 + 9*0.5 + 6*0.2, 3*0.3 + 1*0.5 + 4*0.2],
  [1*0.3 + 3*0.6 + 5*0.1, 2*0.3 + 4*0.6 + 6*0.1]
]


我怎么能这么做?谢谢

这是我发现的。结果证明它是简单的元素级mulitiplication(*或tf.multiply)

[
  [10, 5],
  [8, 2],
  [7.8, 2.2],
  [2.6, 3.6]
]
dist = tf.constant([[0.1, 0.6, 0.3], [0.2, 0.4, 0.4], [0.3, 0.5, 0.2], [0.3, 0.6, 0.1]])
val = tf.constant([[[10.0, 5.0],[10, 5],[10,5]],[[8, 2],[8, 2],[8, 2]],[[7, 3],[9, 1],[6, 4]],[[1, 2],[3, 4],[5, 6]]])
dist.get_shape()
   TensorShape([Dimension(4), Dimension(3)])
val.get_shape()
   TensorShape([Dimension(4), Dimension(3), Dimension(2)])
val2 = tf.transpose(val, perm=[0, 2, 1])
val2.get_shape()
   TensorShape([Dimension(4), Dimension(2), Dimension(3)])
dist2 = tf.expand_dims(dist, 1)
dist2.get_shape()
   TensorShape([Dimension(4), Dimension(1), Dimension(3)])
c1 = val2 * dist2
c1.get_shape()
   TensorShape([Dimension(4), Dimension(2), Dimension(3)])
c2 = tf.reduce_sum(c1, 2)

print(c2.eval())
[[ 10.           5.        ]
 [  8.           2.        ]
 [  7.80000019   2.20000005]
 [  2.60000014   3.5999999 ]]