Numpy广播维度不匹配错误求助:神经网络代码运行失败
修复神经网络代码的维度广播错误
1. 基础语法与导入错误
numpy导入别名写错,多处调用numpy的地方使用了错误别名:
原代码:import numpy as no no.random.shuffle(data)修正为:
import numpy as np np.random.shuffle(data)未定义变量
data_train,需使用已加载的data变量;同时原代码中X_train = data_train[1:n]的切片逻辑错误(n=2会导致切片后形状为(1,2),与注释的(1,6)矛盾),若要取除第一行外的所有样本作为训练集,修正为:X_train = data[1:] # 形状为(10,2),匹配dense1的输入维度2若数据集包含特征与标签,需正确拆分:
# 假设最后一列是标签,前n-1列是特征 X = data[:, :-1] # 形状(11,2) y = data[:, -1] X_train = X[:10] # 取前10个样本作为训练集
2. 类定义语法错误
- 类名关键字拼写错误、方法定义缺少冒号、多余括号:
原代码:
修正为:Class Layer_Dense: def __init__(self,n_inputs, n_neurons)): self.weights = 0.1 * 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.biasesclass Layer_Dense: def __init__(self, n_inputs, n_neurons): self.weights = 0.1 * 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
3. 权重与偏置更新的维度不匹配(核心错误)
这是导致ValueError的直接原因:
dense1的weights形状为
(2,6),原代码用(1,6)的随机数更新,无法广播相加,需改为对应形状:
原代码:dense1.weights += 0.05 * np.random.randn(1,6)修正为:
dense1.weights += 0.05 * np.random.randn(2,6)dense2的biases需对应输出神经元数量2,原代码错误生成
(1,6)的形状,且用赋值=会覆盖原有偏置,应改为+=更新:
原代码:dense2.biases = 0.05 * np.random.randn(1,6)修正为:
dense2.biases += 0.05 * np.random.randn(1,2)
修正后的核心代码片段
import numpy as np import pandas as pd bg_data = pd.read_csv("/Users/user/.kaggle/Bg_small_Dato.csv") data = np.array(bg_data) m, n = data.shape # shape is (11,2) np.random.shuffle(data) # 正确拆分特征与训练集 X = data[:, :-1] X_train = X[1:] class Layer_Dense: def __init__(self, n_inputs, n_neurons): self.weights = 0.1 * 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 # 初始化网络层 dense1 = Layer_Dense(2,6) dense2 = Layer_Dense(6,2) # 训练循环 Lowest_loss = 9999999 for iteration in range(10000): # 按对应维度更新权重与偏置 dense1.weights += 0.05 * np.random.randn(2,6) dense1.biases += 0.05 * np.random.randn(1,6) dense2.weights += 0.05 * np.random.randn(6,2) dense2.biases += 0.05 * np.random.randn(1,2) # 前向传播 dense1.forward(X_train) # 后续激活函数、损失计算逻辑...
内容的提问来源于stack exchange,提问作者Ayodeji001
相关产品推荐
相关产品推荐

