我有两个数组,打印输出声明它们的大小都相同((20L,))
。我想把它们按元素相乘。使用A*B
或np.multiply(A,B)
给出相同的错误:
ValueError: non-broadcastable output operand with shape (20,) doesn't match the broadcast shape (20,20)
具体来说,我试过:
for k in xrange(1,self.HidNum):
self.WHLayers[k-1]-=learning_rate*(\
self.WHidback[k][j].dot(forward_pass[-(i+1)][2]).reshape(self.HidDim,1)*\
(forward_pass[-(i+1)-j][0][k] * (1- forward_pass[-(i+1)-j][0][k])).reshape(self.HidDim,1) *\
forward_pass[-(i+1)-j][0][k-1]
)
self.BHid[k-1]-= learning_rate*\
self.WHidback[k][j].dot(forward_pass[-(i+1)][2].reshape(self.HidDim,1) *\
np.multiply(forward_pass[-(i+1)-j][0][k], (1 - forward_pass[-(i+1)-j][0][k])))
这给了我这个错误信息:
Traceback (most recent call last):
File "<pyshell#83>", line 1, in <module>
vectrain(bob,1)
line 178, in vectrain
cur_cost=net.update(inputs,exp_y,learning_rate)
line 105, in update
np.multiply(forward_pass[-(i+1)-j][0][k],(1 - forward_pass[-(i+1)-j][0][k])
ValueError: non-broadcastable output operand with shape (20,) doesn't match the broadcast shape (20,20)
以及:
for k in xrange(1,self.HidNum):
self.WHLayers[k-1]-=learning_rate*(\
self.WHidback[k][j].dot(forward_pass[-(i+1)][2]).reshape(self.HidDim,1)*\
(forward_pass[-(i+1)-j][0][k] * (1- forward_pass[-(i+1)-j][0][k])).reshape(self.HidDim,1) *\
forward_pass[-(i+1)-j][0][k-1]
)
self.BHid[k-1]-= learning_rate*\
self.WHidback[k][j].dot(forward_pass[-(i+1)][2].reshape(self.HidDim,1) *\
(forward_pass[-(i+1)-j][0][k] * (1 - forward_pass[-(i+1)-j][0][k])))
这让我明白:
Traceback (most recent call last):
File "<pyshell#85>", line 1, in <module>
vectrain(bob,1)
line 178, in vectrain
cur_cost=net.update(inputs,exp_y,learning_rate)
line 106, in update
(1 - forward_pass[-(i+1)-j][0][k])
ValueError: non-broadcastable output operand with shape (20,) doesn't match the broadcast shape (20,20)
我列出了self.WHLayers
更新,因为它没有遇到问题,而且几乎完全一样。self.BHid update
的最后一行就是问题所在,如果我尽可能地分解每一行,我会在这里遇到错误:
(1 - forward_pass[-(i+1)-j][0][k])
引用的for循环嵌套在另外两个for循环中(因此i
和j
索引)。self.HidNum
、learning_rate
和self.HidDim
都是非零正整数。你知道吗
self.WHLayers
是矩阵列表self.BHid
是向量列表self.WHidback
是矩阵列表forward_pass
是一个列表列表,其中每个内部列表包含三个对象:一个list of ndarrays
、一个single ndarray
和另一个ndarray
。你知道吗引用for循环之前的打印输出显示
forward_pass[-(i+1)-j][0][k].shape,
(1 - forward_pass[-(i+1)-j][0][k]).shape,
(forward_pass[-(i+1)-j][0][k] *(1 - forward_pass[-(i+1)-j][0][k])).shape
都有相同的形状:(20L,)
我不知道为什么广播形状是(20,20)
在这里,而不是在self.WHLayers update
中。你知道吗
目前没有回答
相关问题 更多 >
编程相关推荐