在线性代数中,我执行的似乎是合法的操作,但不是针对Numpy Python
提供上下文;我正在手动设置ANN,执行反向传播
这里,我“转置”了w
(权重)1D数组(通过将其转换为矩阵,然后转置)。
下面是我的故障代码:
w = w.T
ans = l*dEdW
w = np.subtract(w, ans)
#w = w - l*dEdW
ValueError: operands could not be broadcast together with shapes (1,30) (30,455)
数学上:
只要第一个矩阵w
的列数等于第二个矩阵yield of l*dEdW
的行数,则A-ok
就Numpy而言,我错在哪里
注意:尝试以下行也会产生相同的错误:
w -= l*dEdW # ideally
更新:
print(dEdW)
显示了NaNs
的矩阵。我怀疑这就是问题所在,因为形状是正确的,但没有内容
我似乎只能“接受”一个答案。所有的评论和回答都富有洞察力。我认为这是另一个问题。谢谢大家
像你尝试做的减法并没有很好的定义。矩阵减法是逐元素进行的,如果要减去这两个数组,numpy需要有一种明显的方法将一个维度广播到另一个数组的维度中。因为numpy假设您希望在第二个维度中重复arr1,455次以匹配arr2,所以下面的操作是有效的
我想知道您是否只想从另一个数组的每一行中减去
w
从(3,4)中减去(3,)形状会产生错误:
但是如果我们把
w
改为(3,1):numpy
有一个强大的broadcasting
机制,允许我们使用两个定义良好的规则组合具有不同形状的数组相关问题 更多 >
编程相关推荐