手动搭建ANN时遇NumPy矩阵点积维度不匹配错误求助
NumPy点积维度不匹配问题解决思路
核心问题原因
np.dot要求第一个矩阵的列数等于第二个矩阵的行数才能执行矩阵乘法。你当前两个数组都是(4,2),第一个数组的列数是2,第二个的行数是4,不满足匹配条件,因此触发报错。
具体解决方向
- 转置权重矩阵或训练数据:根据你的网络逻辑,转置其中一个矩阵来匹配维度。示例代码:
# 若训练数据是(4,2)(4个样本,每个样本2个特征),转置现有权重矩阵适配 output = np.dot(training, weights[0].T) # 或转置训练数据(若你的维度定义是特征在前) output = np.dot(training.T, weights[0]) - 修正权重矩阵的初始形状:输入层到隐藏层的权重矩阵形状应为
(输入特征数, 隐藏层神经元数)。如果训练数据是(4,2)(4样本、2特征),权重矩阵不该是(4,2),应调整为(2, 神经元数量),此时直接执行np.dot(training, weights[0])就能得到(4, 神经元数量)的输出,符合前向传播逻辑。 - 分步打印维度验证:在运算前后打印各数组的形状,排查维度逻辑错误:
print(f"training shape: {training.shape}") print(f"weights[0] shape: {weights[0].shape}") print(f"weights[0].T shape: {weights[0].T.shape}") - 使用
@运算符简化矩阵乘法:@是Python原生矩阵乘法运算符,和np.dot逻辑一致,但写法更直观,能减少维度混淆:result = training @ weights[0].T
内容的提问来源于stack exchange,提问作者TiltedGamer
相关产品推荐
相关产品推荐

