Theano广播不同于numpy';s

Theano广播不同于numpy';s,numpy,matrix,theano,Numpy,Matrix,Theano,考虑以下numpy广播示例: import numpy as np import theano from theano import tensor as T xval = np.array([[1, 2, 3], [4, 5, 6]]) bval = np.array([[10, 20, 30]]) print xval + bval 正如预期的那样,向量bval被添加到矩阵xval的每一行,并且输出为: [[11 22 33] [14 25 36]] 试图在git版本的theano中复

考虑以下numpy广播示例:

import numpy as np
import theano
from theano import tensor as T

xval = np.array([[1, 2, 3], [4, 5, 6]])
bval = np.array([[10, 20, 30]])
print xval + bval
正如预期的那样,向量
bval
被添加到矩阵
xval
的每一行,并且输出为:

[[11 22 33]
 [14 25 36]]
试图在git版本的theano中复制相同的行为:

x = T.dmatrix('x')
b = theano.shared(bval)
z = x + b
f = theano.function([x], z)

print f(xval)
我得到以下错误:

ValueError: Input dimension mis-match. (input[0].shape[0] = 2, input[1].shape[0] = 1)
Apply node that caused the error: Elemwise{add,no_inplace}(x, <TensorType(int64, matrix)>)
Inputs types: [TensorType(float64, matrix), TensorType(int64, matrix)]
Inputs shapes: [(2, 3), (1, 3)]
Inputs strides: [(24, 8), (24, 8)]
Inputs scalar values: ['not scalar', 'not scalar']
ValueError:输入维度不匹配。(输入[0]。形状[0]=2,输入[1]。形状[0]=1)
导致错误的应用节点:Elemwise{add,no_inplace}(x,)
输入类型:[TensorType(浮点64,矩阵),TensorType(int64,矩阵)]
输入形状:[(2,3)、(1,3)]
输入跨步:[(24,8),(24,8)]
输入标量值:[“非标量”、“非标量”]

我了解
Tensor
对象,例如
x
具有
broadcastable
属性,但我找不到方法1)为
共享的
对象正确设置该属性,或2)正确推断该属性。如何在theano中重新实现numpy的行为?

编译之前,无需在图中声明所有可广播维度。NumPy使用运行时形状信息

默认情况下,所有共享变量尺寸标注都不可广播,因为它们的形状可能会更改

要使用示例中所需的可广播维度创建共享变量,请执行以下操作:

b = theano.shared(bval, broadcastable=(True,False))

我将把这些信息添加到文档中。

它就在那里:您在哪里找到的?也许我们还需要在另一个地方加上这个。啊,对不起,它就在夸尔格。。。我没看见。无论如何,我认为这是一个重要的功能,可能会保证更多的可见性?我在本节末尾添加了一个注释(尚未合并,但在PR中)这里有一些限制吗?对于大多数(但不是所有)广播模式,我得到“TypeError:找不到合适的SharedVariable构造函数。您确定支持所有KWARG吗?我们不支持参数dtype或type。”。我不知道对有效的广播模式有限制。如何设置子传感器的可广播属性,这些子传感器是通过选择索引而产生的,并且不是共享的?谢谢请看我的问题: