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

Pytorch使用BCEWithLogitsLoss报错Float无法转Long类型如何解决

错误原因
  • 核心原因是损失函数和标签类型不匹配:nn.BCEWithLogitsLoss()要求输入的标签必须为浮点型(FloatTensor),你手动将标签y转换为长整型(LongTensor),损失计算时无法将浮点运算结果转为长整型,直接触发该报错。
  • 代码还存在两处隐藏的兼容问题,会放大该错误:
    1. 评估函数evaluate中计算损失时,y_pred没有执行squeeze()操作,预测输出和标签的维度不匹配,会额外引发类型运算异常。
    2. 若你是二分类场景使用BCE损失,AlexNet的输出维度output_dim必须设置为1,若错误设置为2也会出现维度/类型不匹配问题。
修复方案
  1. 调整标签类型转换逻辑,将所有y = y.to(device).long()修改为y = y.to(device).float(),匹配BCE损失的输入要求。
  2. 统一训练、评估阶段的预测值处理逻辑,在评估函数的损失计算前也对y_pred做压缩处理:
# evaluate函数内损失计算代码修改为
loss = criterion(y_pred.squeeze(), y)
  1. 确认你的任务类型适配损失函数:如果是N分类(N>2)任务,将损失函数更换为nn.CrossEntropyLoss(),此时标签才需要用long类型,同时将AlexNet的output_dim设置为类别数N即可。
  2. 若你的binary_accuracy函数对标签类型有特殊要求,可在计算准确率时单独将标签临时转为long类型,不影响损失计算即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 12:15:04