Python 如何在theano中播放3d张量?

Python 如何在theano中播放3d张量?,python,theano,Python,Theano,如果我有一个三维张量块B,我想把它的一些“面”设置为0,概率为0.5。这里轴1是行,轴2是列,轴3是“面”。我试过了 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

如果我有一个三维张量块
B
,我想把它的一些“面”设置为0,概率为0.5。这里轴1是行,轴2是列,轴3是“面”。我试过了

    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 

您可以使用
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.]]]