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

PyTorch1.9迁移报Tensor.__format__不支持格式字符串错误怎么解决

问题根因

你遇到的TypeError: unsupported format string passed to Tensor.__format__报错,核心原因是PyTorch 1.9及以上版本取消了0维张量在字符串格式化时自动转换为Python原生数值的隐式兼容逻辑。你代码中传入format方法的losses.val、losses.avg、accs.val、accs.avg、emb_norms.val、emb_norms.avg均为PyTorch张量类型,直接对张量使用.4f、.2f这类数值格式符就会触发类型错误。

同时你日志中还有两个附加提示,也可以同步修复避免后续版本兼容问题:

  1. transforms.Scale接口已废弃,torchvision官方已用transforms.Resize替代该接口
  2. 命名张量的提示为PyTorch 1.9内部实验性API触发,不影响正常运行
修复方案
  • 首先解决核心报错:给所有传入format的张量添加.item()调用,将0维张量转为Python原生数值类型,修改后的代码段如下:
if batch_idx % args.log_interval == 0:
    print('Train Epoch: {} [{}/{}]\t'
          'Loss: {:.4f} ({:.4f}) \t'
          'Acc: {:.2f}% ({:.2f}%) \t'
          'Emb_Norm: {:.2f} ({:.2f})'.format(
        epoch, batch_idx * num_items, len(train_loader.dataset),
        losses.val.item(), losses.avg.item(), 
        100. * accs.val.item(), 100. * accs.avg.item(), emb_norms.val.item(), emb_norms.avg.item()))
  • 同步修复废弃接口提示:找到你数据预处理逻辑中的transforms.Scale调用,直接替换为transforms.Resize即可,两个接口参数、功能完全一致。
效果验证

修改完成后重新运行原启动命令,即可正常输出训练日志,不会再触发类型错误,同时废弃接口的提示也会消失。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 02:45:03