首页 文章

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

提问于
浏览
1

我正在尝试类似下面的代码

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)

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:输入维度不匹配 . (input [0] .shape [1] = 5,input [1] .shape [1] = 90)应用导致错误的节点:Elemwise {add,no_inplace}(Sum {axis = [1],acc_dtype = float64 } . ,DimShuffle {x,0} .0)

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

z=theano.function([x],w_v_bias)
  z(datax[0])

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

2 回答

  • 0

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

    更改

    x = T.dmatrix('x')
    

    x = T.dtensor3('x')
    

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

  • 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)数组 .

相关问题