![](/img/trans.png)
[英]ValueError: matmul: Input operand 1 has a mismatch in its core dimension 0, with gufunc signature (n?,k),(k,m?)->(n?,m?)
[英]matmul: Input operand 1 has a mismatch in its core dimension 0, with gufunc signature
topology = [p, 4, 8, 16, 8, 4, 1]
neural_net = create_nn(topology, sigm)
l2_cost = (lambda Yp, Yr: np.mean((Yp - Yr) ** 2),
lambda Yp, Yr: (Yp- Yr))
def train(neural_net, X, Y, l2_cost, lr=0.5):
out = [(None, X)]
#Foward pass
for l, layer in enumerate(neural_net):
z = out[-1][1] @ neural_net[l].W + neural_net[l].b
a = neural_net[l].act_f[0](z)
out.append((z, a))
print(out[-1[1]])
train(neural_net, X, Y, l2_cost, 0.5)
这告诉我下一个错误
matmul: Input operand 1 has a mismatch in its core dimension 0,
with gufunc signature (n?,k),(k,m?)->(n?,m?) (size 4 is different from 2)
欢迎来到 StackOverFlow!
不知道代码的 rest,特别是不知道矩阵的shape
,我最好的猜测是您试图将尺寸与预期不匹配的矩阵相乘。
让我引用 PennState 这篇文章中的一段话:
要执行矩阵乘法,第一个矩阵的列数必须与第二个矩阵的行数相同。
每当您使用@
运算符时,您就是在告诉 Python 您正在执行矩阵乘法!
我们以以下两个矩阵为例:
import numpy as np
X = np.array([[1, 2], [3, 4], [5, 6]])
Y = np.array([[7, 8, 9], [9, 10, 11]])
X 的形状为 (3, 2),而 Y 的形状为 (2, 3)。 这意味着它们确实可以相乘,并且生成的矩阵将具有 (3, 3) 形状。
print(X @ Y)
######### Output #########
# [[ 25 28 31]
# [ 57 64 71]
# [ 89 100 111]]
##########################
现在假设您尝试转置矩阵 Y,即反转其行和列,使其成为 (3, 2) 矩阵。 你期望会发生什么?
是的,您猜对了,Python 会告诉您您做错了什么,因为线性代数中不允许此操作。
# Matrix Multiplication between X and Y transposed
print(X @ Y.T)
######### Output #########
# ValueError: matmul: Input operand 1 has a mismatch in its core dimension 0
# with gufunc signature (n?,k),(k,m?)->(n?,m?) (size 3 is different from 2)
##########################
因此,您唯一应该做的就是使用Y.shape
类的命令检查矩阵尺寸并纠正错误。
我希望这有帮助: )
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.