You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

构建神经语言模型时遇矩阵维度不匹配ValueError问题求助

解决神经语言模型的矩阵维度不匹配错误

错误信息

Traceback (most recent call last):
  File "main.py", line 99, in <module>
    neural_network.train(training_inputs, training_outputs, 1500)
  File "main.py", line 60, in train
    output = self.think(training_inputs)
  File "main.py", line 81, in think
    output = self.sigmoid(np.dot(inputs, self.synaptic_weights))
  File "<__array_function__ internals>", line 180, in dot
ValueError: shapes (2040,21) and (2040,2040) not aligned: 21 (dim 1) != 2040 (dim 0)

问题根源

这个错误是矩阵乘法维度不匹配导致的,同时代码里还有两处逻辑错误:

  1. 训练输入被错误转置,从(21,2040)(21个样本,每个2040维)变成了(2040,21),无法和(2040,2040)的权重矩阵做乘法
  2. think函数里的嵌套循环会把每个样本向量覆盖成单个浮点数,彻底破坏输入结构
  3. 反向传播时的权重调整计算未正确转置输入矩阵

具体修复步骤

1. 修正训练输入的转置操作

删除不必要的转置,保留原始样本维度:

# 原错误代码:training_inputs = np.array(read('inputs.cvs')).T
training_inputs = np.array(read('inputs.cvs'))

2. 修复think函数的输入处理逻辑

删除破坏输入结构的嵌套循环,直接用numpy的类型转换:

def think(self, inputs):
    # 直接转换为float类型,无需循环
    inputs = inputs.astype(float)
    output = self.sigmoid(np.dot(inputs, self.synaptic_weights))
    return output

3. 统一训练输出的数据格式

将训练输出转为numpy数组,确保和模型输出维度匹配:

# 原错误代码:training_outputs = read('outputs.cvs')
training_outputs = np.array(read('outputs.cvs'))

4. 修正反向传播的权重调整计算

在权重调整时转置输入矩阵,保证维度匹配:

# 原错误代码:adjustments = np.dot(training_inputs, error * self.sigmoid_derivative(output))
adjustments = np.dot(training_inputs.T, error * self.sigmoid_derivative(output))

修复后验证

修改完成后,矩阵维度会完全匹配:

  • 输入(21,2040) × 权重(2040,2040) → 输出(21,2040),和训练输出维度一致
  • 反向传播的调整矩阵形状为(2040,2040),可直接与权重矩阵相加

内容的提问来源于stack exchange,提问作者Devco

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 06:25:10