我正在尝试类似下面的代码
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 回答
问题是
datax
是一个3D张量,datax[index*5:(index+1)*5]
也是一个3D张量,但你试图将其分配给x
,这是一个2D张量(即一个矩阵) .更改
至
解决了这个问题但是创建了一个新问题,因为W和x的尺寸不匹配来执行点积 . 目前尚不清楚预期的结果是什么 .
几次击中和试验后解决了它 .
我需要的是改变
至
现在,在向点积的五个向量中的每个向量中添加元素之后,它产生(5,90)数组 .