运行Python神经网络代码时遭遇维度不匹配错误:shapes (3,4) and (5,2) not aligned: 4 (dim 1) != 5 (dim 0)
解决Numpy全连接层矩阵维度不匹配的ValueError
嘿,这个问题很典型——你不小心把第一个层给覆盖了,导致输入维度和层的要求对不上!咱们一步步拆解:
错误原因分析
你看到的错误 shapes (3,4) and (5,2) not aligned: 4 (dim 1) != 5 (dim 0) 是矩阵乘法的基本规则问题:当你用np.dot(a, b)时,矩阵a的列数必须等于矩阵b的行数。
看你的代码细节:
- 输入
X是3个样本,每个样本4个特征,形状为(3,4) - 你先创建了
layer1 = Layer_Dense(4,5)(这步是对的,输入维度匹配X的4个特征,输出5个神经元),但紧接着又写了layer1 = Layer_Dense(5,2)——这直接把之前的layer1给覆盖了!现在这个新的layer1要求输入维度是5,但你喂给它的还是4维的X,自然就触发了维度不匹配的错误。
而且你明显是想搭建两层串联的网络:输入→第一层(4→5)→第二层(5→2),结果变成了直接用一个要求5维输入的层去处理4维数据,维度链直接断了。
修复后的代码
把第二个层换个独立的名字,并且按网络顺序传递数据:
import numpy as np np.random.seed(0) X = [[1, 2, 3, 2.5], [2.0, 5.0, -1.0, 2.0], [-1.5, 2.7, 3.3, -0.8]] class Layer_Dense: def __init__(self,n_inputs, n_neurons): self.weights = 0.10 * np.random.randn(n_inputs, n_neurons ) self.biases = np.zeros((1, n_neurons)) def forward(self, inputs): self.output = np.dot(inputs, self.weights) + self.biases # 第一层:输入匹配X的4个特征,输出5个神经元 layer1 = Layer_Dense(4,5) # 第二层:输入匹配第一层的输出维度5,输出2个神经元 layer2 = Layer_Dense(5,2) # 先让第一层处理原始输入 layer1.forward(X) # 再把第一层的输出作为第二层的输入 layer2.forward(layer1.output) print(layer2.output)
修复逻辑说明
layer1接收形状为(3,4)的X,经过矩阵乘法(3,4) · (4,5)得到(3,5)的输出,加上偏置后形状保持(3,5)layer2接收(3,5)的输入,经过矩阵乘法(3,5) · (5,2)得到(3,2)的输出,这就是最终的网络输出,维度完全匹配。
现在运行代码就不会再报错啦!
内容的提问来源于stack exchange,提问作者Omar Khan
相关产品推荐
相关产品推荐

