【发布时间】:2021-05-22 20:28:47
【问题描述】:
我正在执行在线性代数中看似合法的操作,但在 Numpy Python 中却不是。
给出上下文;我正在手动设置 ANN,执行反向传播。
在这里,我“转置”w(权重)一维数组(通过将其转换为矩阵然后转置)。
以下是我的麻烦代码:
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 的矩阵。我怀疑这是问题所在,因为形状正确但没有内容。
我似乎只能“接受”一个答案。所有的 cmets 和答案都很有见地。我相信这是一个单独的问题。谢谢大家
【问题讨论】:
-
您应该提供一个最小的可重现示例。这里
w、dEdW和l是未定义的。例如,至少使用np.zeros将它们设置为零。 -
这并不是 Stackoverflow 的工作原理。你需要想出一个对整个社区有用的问题来解决,而不仅仅是你。因此,您需要找到一种以简单方式重现它的方法,以便遇到类似问题的每个人都可以通过理想地阅读此线程来解决它。
-
看起来您正在尝试对矩阵乘法进行某种减法变体,一种将一个矩阵的列与另一个矩阵的行配对。矩阵乘法以这种方式完成
sum-of-products。numpy有 -dot和@。APL和 MATLAB 对此进行了概括。但是对于numpy,元素操作是常态。 -
如果你给出一个简单的复制粘贴数组的例子会更好,比如
np.arange(4).reshape(2,2)。给出 2 个输入数组,加上一个期望的结果,并清楚地展示您期望的计算。 -
如果这确实是线性代数中的合法操作,您应该能够参考一些来源(例如 wiki 或一些 LA 教程)。
标签: python numpy matrix deep-learning array-broadcasting