首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >TypeError:不支持的格式字符串传递给Tensor.__format__

TypeError:不支持的格式字符串传递给Tensor.__format__
EN

Stack Overflow用户
提问于 2021-09-01 22:52:36
回答 1查看 3.9K关注 0票数 2

当试图将为旧PyTorch编写的代码转换为1.9时,我会得到以下错误:

代码语言:javascript
运行
复制
(fashcomp) [jalal@goku fashion-compatibility]$ python main.py --name test_baseline --learned --l2_embed --datadir ../../../data/fashion/
/scratch3/venv/fashcomp/lib/python3.8/site-packages/torchvision/transforms/transforms.py:310: UserWarning: The use of the transforms.Scale transform is deprecated, please use transforms.Resize instead.
  warnings.warn("The use of the transforms.Scale transform is deprecated, " +
  + Number of params: 3191808
<class 'torch.utils.data.dataloader.DataLoader'>
/scratch3/venv/fashcomp/lib/python3.8/site-packages/torch/nn/functional.py:718: UserWarning: Named tensors and all their associated APIs are an experimental feature and subject to change. Please do not use them for anything important until they are released as stable. (Triggered internally at  /pytorch/c10/core/TensorImpl.h:1156.)
  return torch.max_pool2d(input, kernel_size, stride, padding, dilation, ceil_mode)
Traceback (most recent call last):
  File "main.py", line 329, in <module>
    main()    
  File "main.py", line 167, in main
    train(train_loader, tnet, criterion, optimizer, epoch)
  File "main.py", line 240, in train
    print('Train Epoch: {} [{}/{}]\t'
  File "/scratch3/venv/fashcomp/lib/python3.8/site-packages/torch/_tensor.py", line 561, in __format__
    return object.__format__(self, format_spec)
TypeError: unsupported format string passed to Tensor.__format__

下面是代码中有问题的部分:

代码语言:javascript
运行
复制
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, losses.avg, 
        100. * accs.val, 100. * accs.avg, emb_norms.val, emb_norms.avg))

我从这个错误报告那里看到,到两年前,还没有为这个问题提供任何解决方案。对于如何解决这个问题,你有什么建议吗?或者任何一种选择?

代码来自这里

EN

回答 1

Stack Overflow用户

发布于 2021-09-01 22:59:09

如果尝试以特定方式格式化torch.Tensor,则此错误是可重复的:

代码语言:javascript
运行
复制
>>> print('{:.2f}'.format(torch.rand(1)))
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-3-ece663be5b5c> in <module>()
----> 1 print('{:.2f}'.format(torch.tensor([1])))

/usr/local/lib/python3.7/dist-packages/torch/_tensor.py in __format__(self, format_spec)
    559         if self.dim() == 0:
    560             return self.item().__format__(format_spec)
--> 561         return object.__format__(self, format_spec)
    562 
    563     def __ipow__(self, other):  # type: ignore[misc]

TypeError: unsupported format string passed to Tensor.__format__

执行'{}'.format(torch.tensor(1)) --即没有任何形成规则--将有效。

这是因为torch.Tensor没有实现这些特定的格式操作。

一个简单的解决方法是使用torch.Tensoritem转换为适当的对应类型。

代码语言:javascript
运行
复制
>>> print('{:.2f}'.format(torch.rand(1).item()))
0.02

应该将此修改应用于涉及print字符串表达式的所有printlosses.vallosses.avgaccs.valaccs.avgemb_norms.valemb_norms.avg

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69021335

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档