贝叶斯神经网络训练CrossEntropyLoss报Target超出边界如何修改
报错根因
你遇到的IndexError: Target 11 is out of bounds是分类任务中非常典型的输出维度不匹配问题:
PyTorch的CrossEntropyLoss要求模型输出的最后一维维度必须和分类任务的总类别数完全一致。你当前的数据集是32分类任务(标签取值范围为0~31),但原模型最后一层的输出维度设置为out_features=3,仅支持3分类任务,当遇到标签值≥3的样本时就会触发越界错误。
适配修改方案
1. 核心修改:调整模型最后一层输出维度
直接将原模型最后一层贝叶斯线性层的out_features参数从3改为32即可,修改后的模型定义如下:
model = nn.Sequential( bnn.BayesLinear(prior_mu=0, prior_sigma=0.1, in_features=5, out_features=100), nn.ReLU(), bnn.BayesLinear(prior_mu=0, prior_sigma=0.1, in_features=100, out_features=32), )
2. 可选优化调整
如果修改后模型训练效果达不到预期,可以根据实际情况调整以下参数:
- 隐藏层维度:将第一层贝叶斯线性层的
out_features从100适当调高到128/256,提升模型拟合能力 - 超参数:调整
klweight、学习率lr的取值,或者增加训练轮次 - 标签类型:确认
target_tensor的数据类型为torch.long,符合CrossEntropyLoss的输入要求
内容的提问来源于stack exchange,提问作者Yumeng Xu
相关产品推荐
相关产品推荐

