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

关于两层神经网络Softmax损失中numpy数组索引维度的疑问

Softmax损失行的索引逻辑与维度匹配解析

核心维度澄清

probs是形状为(N,C)的数组(N是样本数,C是类别数),这里的y绝对不是(1,C)维度,它的正确形状是(N,)——即一维数组,每个元素对应第i个样本的真实类别索引(取值范围0到C-1)。

索引逻辑拆解

probs[np.arange(N), y]是numpy的整数数组索引,逻辑如下:

  • np.arange(N)生成[0,1,...,N-1]的一维数组,对应每个样本的行索引;
  • y是长度为N的一维数组,每个元素y[i]对应第i个样本真实类别的列索引;
  • 两者配对后,会从probs中逐个取出probs[0,y[0]], probs[1,y[1]], ..., probs[N-1,y[N-1]],最终得到长度为N的一维数组,每个元素是对应样本真实类别的预测概率。

维度错误原因及解决

如果你的y是(1,C)维度,会和np.arange(N)的长度不匹配(比如N=100时,np.arange(N)有100个元素,而(1,C)的y只有C个元素),numpy无法完成配对索引,因此抛出维度错误。

解决方法:
检查y的形状,若为二维(比如(1,N)或(N,1)),用y = y.flatten()或y = y.squeeze()将其转为(N,)的一维数组。

示例验证

假设N=3,C=2,probs为:

[[0.8, 0.2],
 [0.3, 0.7],
 [0.5, 0.5]]

y = [0,1,0](3个样本的真实类别分别是第0、1、0类),则probs[np.arange(3), y]会取出[0.8, 0.7, 0.5],后续取对数加负号即可得到每个样本的损失值。

内容的提问来源于stack exchange,提问作者maths and chess

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 08:10:53