2017-05-30 61 views
0

我有3個狀態(即狀態是一個向量,在這個例子中向量長度是2),我有概率分佈(例如10%狀態1,60%狀態2,30 %狀態3)。我想推導出一個新的狀態,即概率*狀態的總和。當然,我也需要考慮批次。從Tensorflow中的概率分佈計算平均狀態

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]或[批次,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]或[批次,狀態值的張量]。在這種情況下,該值應該是

[ 
    [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] 
] 

[ 
    [10, 5], 
    [8, 2], 
    [7.8, 2.2], 
    [2.6, 3.6] 
] 

我怎麼能這樣做呢?謝謝!

回答

0

這是我發現的。原來是簡單元素明智多重(*或tf.multiply)

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 ]]