PyTorch二分类训练交叉熵损失初始值错误且训练无变化如何解决?
代码存在的问题如下:
- 优化器绑定参数错误
你实例化的模型变量是nn_model,但创建优化器时传入的是未定义的model.parameters(),优化器完全没有关联到你实际训练的模型参数,训练过程中参数不会得到任何更新,这是损失全程不变的核心原因。
修正方式:将优化器初始化代码改为optimizer = optim.Adam(nn_model.parameters(), lr=1e-4, weight_decay=5e-3) - BatchNorm1d维度配置错误
经过nn.Linear(128, 64)层后,输出特征维度是(batch_size, 64),而你设置的nn.BatchNorm1d(1)要求输入的特征维度为1,会直接破坏特征分布,也会导致初始损失偏离理论值。
修正方式:将BatchNorm层改为nn.BatchNorm1d(64) - 标签类型不符合损失函数要求
nn.CrossEntropyLoss()要求输入的标签为torch.long类型,你在读取标签时调用了.float()转为浮点型,可能导致损失计算逻辑异常。
修正方式:将读取标签的代码改为inputs, labels = data['embeddings'], data['labels'].long() - 额外优化建议:当前训练轮次只设置了2轮,若数据集规模较大可能还没收敛,可以根据验证集效果适当上调训练轮次。
内容的提问来源于stack exchange,提问作者skidjoe
相关产品推荐
相关产品推荐

