【问题标题】:Numpy .dot() ValueErrorNumpy .dot() 值错误
【发布时间】:2022-01-13 19:02:27
【问题描述】:

我正在尝试了解问题。我的输入矩阵是 (60,4),我的权重矩阵是 (4, 2)。乘法可以很容易地完成(从数学的角度来看,最终的矩阵是(60,2))。但是 Numpy 显示了一个我无法解释的错误。

self.output = np.dot (inputs, self.weights) + self.biases
ValueError: operands could not be broadcast together with shapes (60,4) (4,2)

【问题讨论】:

  • np.dot 不会引发 broadcasting 错误。我认为这是有问题的+。告诉我们所有 3 个数组的形状。或者分别测试每个部分。
  • dot 产生类似ValueError: shapes (4,2) and (4,4) not aligned: 2 (dim 1) != 4 (dim 0)的错误

标签: python numpy linear-algebra matrix-multiplication


【解决方案1】:

确保您的输入是矩阵而不是向量。一种方法是:

np.matrix(a) * np.matrix(b)

但您实际上不必这样做。有许多替代方案可以达到相同的结果:

np.tensordot(a, b, 1)

另一种方式:

np.einsum('ij,jh', a, b)

还有一个:

np.matmul(a, b)

获胜者:

a @ b

【讨论】:

  • np.dot 是点积。这与矩阵乘法不同。
  • 我们不再推荐使用np.matrix。阅读文档。
  • 我觉得它应该是为了完整性,并强调没有理由为什么任意张量应该被乘法运算符视为矩阵,除非它是 matmul
  • 所有这些都与二维数组的np.dot(a,b) 相同。 OP 的错误不是由np.dot 调用产生的。
  • 我同意这里有些问题,但偏差不应具有 (4,2) 的形状,并且 OP 声称这两个矩阵是“输入”和“权重”
猜你喜欢
  • 1970-01-01
  • 2020-08-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-01-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多