来自theano的TypeError使用3D numpy数组时

时间:2015-12-23 11:30:26

标签: python theano

我正在尝试类似于以下代码的内容

select new MyModel
{
    NS = tmp[0],
    Sek = tmp[1],
    Radial = tmp[2]
};

Theano给我一个带有msg的TypeError:

  

无法将Type TensorType(float64,3D)(Variable Subtensor {int64:int64:}。0)转换为Type TensorType(float64,matrix)。您可以尝试手动将Subtensor {int64:int64:}。0转换为TensorType(float64,矩阵)

我在这里做错了什么?

修改

正如daniel将x更改为dtensor3所述,将导致另一个错误。

  

ValueError:输入维度不匹配。 (输入[0] .shape [1] = 5,输入[1] .shape [1] = 90)

     

应用导致错误的节点:Elemwise {add,no_inplace}(Sum {axis = [1],acc_dtype = float64} .0,DimShuffle {x,0} .0)

另一种方法是修改我的列车功能,但之后我将无法进行批量学习。

datax=theano.shared(value=rng.rand(5,500,45))
x=T.dmatrix('x')
i=T.lscalar('i')
W=theano.shared(value=rng.rand(90,45,500))
Hb=theano.shared(value=np.zeros(90))
w_v_bias=T.dot(W,x).sum(axis=2).sum(axis=1)+Hb
z=theano.function([i],w_v_bias,givens={x:datax[i*5:(i+1)*5]})

z(0)

我正在尝试使用可见单位的整数值来实现RBM。

2 个答案:

答案 0 :(得分:0)

问题在于datax是一个3D张量,而datax[index*5:(index+1)*5]也是一个3D张量,但你试图将它分配给x这是一个2D张量(即一个矩阵) )。

更改

x = T.dmatrix('x')

x = T.dtensor3('x')

解决了这个问题,但是创建了一个新问题,因为W和x的尺寸不匹配来执行点积。目前尚不清楚预期的结果是什么。

答案 1 :(得分:0)

在几次击中和试验后解决了它。

我需要的是改变

x=T.dmatrix('x')
w_v_bias=T.dot(W,x).sum(axis=2).sum(axis=1)+Hb 

x=T.dtensor3('x')
w_v_bias=T.dot(x,W).sum(axis=3).sum(axis=1)+Hb

现在,在向点积的五个向量中的每个向量中添加元素之后,它会生成(5,90)数组。