Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/logging/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在pytorch 1.1.0 JIT编译器中启用Dict/orderedict/NamedTuple支持?_Pytorch_Tensorboard_Torchscript - Fatal编程技术网

如何在pytorch 1.1.0 JIT编译器中启用Dict/orderedict/NamedTuple支持?

如何在pytorch 1.1.0 JIT编译器中启用Dict/orderedict/NamedTuple支持?,pytorch,tensorboard,torchscript,Pytorch,Tensorboard,Torchscript,从pytorch 1.1.0的发布亮点。最新的JIT编译器现在似乎支持Dict类型。(来源:) TorchScript中的字典和列表支持:列表和字典类型的行为类似于Python列表和字典 不幸的是,我找不到一种方法使这种改进能够正常工作。以下代码是将功能金字塔网络(FPN)导出到tensorboard的简单示例,tensorboard使用JIT编译器: from collections import OrderedDict import torch import torchvision fro

从pytorch 1.1.0的发布亮点。最新的JIT编译器现在似乎支持Dict类型。(来源:)

TorchScript中的字典和列表支持:列表和字典类型的行为类似于Python列表和字典

不幸的是,我找不到一种方法使这种改进能够正常工作。以下代码是将功能金字塔网络(FPN)导出到tensorboard的简单示例,tensorboard使用JIT编译器:

from collections import OrderedDict

import torch
import torchvision
from torch.utils.tensorboard import SummaryWriter

torchWriter = SummaryWriter(log_dir=".tensorboard/example1")

m = torchvision.ops.FeaturePyramidNetwork([10, 20, 30], 5)
# get some dummy data
x = OrderedDict()
x['feat0'] = torch.rand(1, 10, 64, 64)
x['feat2'] = torch.rand(1, 20, 16, 16)
x['feat3'] = torch.rand(1, 30, 8, 8)
# compute the FPN on top of x
output = m.forward(x)
print([(k, v.shape) for k, v in output.items()])

torchWriter.add_graph(m, input_to_model=x)
当我运行它时,我得到了以下错误:

Traceback (most recent call last):
  File "/home/shared/virtualenv/dl-torch/lib/python3.7/site-packages/torch/utils/tensorboard/_pytorch_graph.py", line 276, in graph
    trace, _ = torch.jit.get_trace_graph(model, args)
  File "/home/shared/virtualenv/dl-torch/lib/python3.7/site-packages/torch/jit/__init__.py", line 231, in get_trace_graph
    return LegacyTracedModule(f, _force_outplace, return_inputs)(*args, **kwargs)
  File "/home/shared/virtualenv/dl-torch/lib/python3.7/site-packages/torch/nn/modules/module.py", line 493, in __call__
    result = self.forward(*input, **kwargs)
  File "/home/shared/virtualenv/dl-torch/lib/python3.7/site-packages/torch/jit/__init__.py", line 284, in forward
    in_vars, in_desc = _flatten(args)
RuntimeError: Only tuples, lists and Variables supported as JIT inputs, but got collections.OrderedDict

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/peng/git-drone/gate_detection/python/gate_detection/errorcase/tb.py", line 36, in <module>
    torchWriter.add_graph(m, input_to_model=x)
  File "/home/shared/virtualenv/dl-torch/lib/python3.7/site-packages/torch/utils/tensorboard/writer.py", line 534, in add_graph
    self._get_file_writer().add_graph(graph(model, input_to_model, verbose, **kwargs))
  File "/home/shared/virtualenv/dl-torch/lib/python3.7/site-packages/torch/utils/tensorboard/_pytorch_graph.py", line 279, in graph
    _ = model(*args)  # don't catch, just print the error message
  File "/home/shared/virtualenv/dl-torch/lib/python3.7/site-packages/torch/nn/modules/module.py", line 493, in __call__
    result = self.forward(*input, **kwargs)
TypeError: forward() takes 2 positional arguments but 4 were given
回溯(最近一次呼叫最后一次):
文件“/home/shared/virtualenv/dl torch/lib/python3.7/site packages/torch/utils/tensorboard/_pytorch_graph.py”,第276行,在图中
trace,u=torch.jit.get_trace_图(模型,参数)
文件“/home/shared/virtualenv/dl torch/lib/python3.7/site packages/torch/jit/_init__.py”,第231行,在get_trace_图中
返回LegacyTracedModule(f,力输出,返回输入)(*args,**kwargs)
文件“/home/shared/virtualenv/dl torch/lib/python3.7/site packages/torch/nn/modules/module.py”,第493行,在调用中__
结果=自我转发(*输入,**kwargs)
文件“/home/shared/virtualenv/dl torch/lib/python3.7/site packages/torch/jit/_init__.py”,第284行,向前
在变量中,在描述中=\u展平(args)
RuntimeError:仅支持元组、列表和变量作为JIT输入,但获得collections.OrderedDict
在处理上述异常期间,发生了另一个异常:
回溯(最近一次呼叫最后一次):
文件“/home/peng/git-drone/gate\u-detection/python/gate\u-detection/errorcase/tb.py”,第36行,在
torchWriter.add_图(m,输入_到_模型=x)
文件“/home/shared/virtualenv/dl torch/lib/python3.7/site packages/torch/utils/tensorboard/writer.py”,第534行,添加图中
self.\u获取\u文件\u编写器()。添加\u图形(图形(模型,输入到模型,详细,**kwargs))
文件“/home/shared/virtualenv/dl torch/lib/python3.7/site packages/torch/utils/tensorboard/_pytorch_graph.py”,第279行,在图中
_=model(*args)#不捕获,只打印错误消息
文件“/home/shared/virtualenv/dl torch/lib/python3.7/site packages/torch/nn/modules/module.py”,第493行,在调用中__
结果=自我转发(*输入,**kwargs)
TypeError:forward()接受2个位置参数,但给出了4个

从错误消息中可以看出,支持仍处于挂起状态。我能相信发布亮点吗?或者我没有正确使用API?

发行说明是准确的,尽管有点模糊。链接(和)中描述的字典/列表/用户定义类支持仅适用于(发行说明中有一些代码示例),但默认情况下,
SummaryWriter
将在传递给它的任何模块上运行TorchScript跟踪程序,跟踪程序仅支持张量和张量列表/元组

因此,修复方法是使用TorchScript编译器而不是跟踪器,但这需要:

  • 访问原始代码
  • 支持Tensorboard中的编译输出(
    ScriptModule

  • 您应该为第(2)项进行修改,还有第(1)项需要修改,但这在短期内对该型号的afaik不起作用。

    非常感谢您的澄清!请确定:您的意思是TorchScript跟踪器在调试时不支持自己的编译输出(ScriptModel)?这应该是跟踪器的唯一功能吗?