2015-11-21 93 views
1

如果我有一個三維張量塊B,我想將它的一些「面」設置爲0,概率爲0.5。這裏軸1是行,軸2是列,軸3是「面」。我試過如何在theano中通過3D張量進行廣播?

size = (B.shape[1], 1, 1) 
    noise = self.theano_rng.binomial(size=size, n=1, p=0.5) 
    return noise * B 

但是,這不起作用,形狀不排隊,我得到一個錯誤。
例如,我想

2 2 2      2 2 2 
3 3 3      3 3 3 
4 4 4      4 4 4 
      * [1 0] ->  
6 6 6      0 0 0 
7 7 7      0 0 0 
8 8 8      0 0 0 

回答

1

您可以使用dimshuffle添加需要啓用廣播尺寸。

這裏有一個工作示例:

import numpy 
import theano 
import theano.tensor as tt 

x = tt.tensor3() 
y = tt.bvector() 
z = x * y.dimshuffle(0, 'x', 'x') 
f = theano.function([x, y], z) 
x_value = numpy.array([[[2, 2, 2], [3, 3, 3], [4, 4, 4]], 
         [[6, 6, 6], [7, 7, 7], [8, 8, 8]]], dtype=theano.config.floatX) 
y_value = numpy.array([1, 0], dtype=numpy.int8) 
print f(x_value, y_value) 

它打印

[[[ 2. 2. 2.] 
    [ 3. 3. 3.] 
    [ 4. 4. 4.]] 

[[ 0. 0. 0.] 
    [ 0. 0. 0.] 
    [ 0. 0. 0.]]]