如何在 theano 中跨 3d 张量广播?
How to broadcast across 3d tensor in theano?
如果我有一个 3d 张量块 B
,我想将它的一些 "faces" 设置为 0,概率为 0.5。这里轴 1 是行,轴 2 是列,轴 3 是 "faces"。我试过了
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.]]]
如果我有一个 3d 张量块 B
,我想将它的一些 "faces" 设置为 0,概率为 0.5。这里轴 1 是行,轴 2 是列,轴 3 是 "faces"。我试过了
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.]]]