如何将图从 fairseq 记录到张量板

问题描述

我从阅读教程中得到的印象是这很容易:打个电话给 add_graph()

一个棘手的部分是弄清楚把它放在哪里。我在 enumerate() 中的 train() 循环的最顶部使用了 fairseq_cli/train.py

for i,samples in enumerate(progress):

    if i == 0:
        # Output graph for tensorboard
        writer = progress._writer("")  #The "" is tag
        writer.add_graph(trainer._model,samples)
        writer.flush()

我将 --tensorboard-logdir mydir/ 传递到对 fairseq-train调用中。这会导致 TensorboardProgressBarWrapper 周围有一个 SimpleProgressBar 包装器(或您使用的任何日志记录格式),因此我试图重用编写器实例。 (也许这是我的错误?)

我可以从 trainer 对象中取出模型,而 add_graph 需要的另一件事是一些数据,这就是为什么我把它放在上面的循环中,所以我可以使用 samples。我也试过 samples[0]错误信息完全相同。

是:

Tracer cannot infer type of ({'id': tensor([743216,642485,92182,793806,494734,275334,53282,449572,1758,...
  20734,469070,678489,473213]),'nsentences': 832,'ntokens': 29775,'net_input': {'src_tokens': tensor([[  225,30,874,...,1330,84,2],[  442,734,7473,38,5,[ 6238,11411,428,10387,2]]),'src_lengths': tensor([21,21,...
  21,21]),'prev_output_tokens': tensor([[   2,22,133,4445,46,1],[   2,59,112,6,1]])},'target': tensor([[ 22,203,2,[132,429,40,[ 22,177,)
:Dictionary inputs to traced functions must have consistent type. Found Tensor and int
Error occurs,No graph saved

我希望有人比我更能理解错误信息?也欢迎提供有关调用 add_graph() 的更好位置的提示,或处理整个事情的更好方法(获得我的模型的视觉表示)。 (PyTorchViz 已经超过 2 年没有更新了,显然不能与最新的 pytorch 一起使用。)

顺便说一下,训练的 Tensorboard 日志记录是有效的。

附加

我又查了一下,发现它会调用我模型的 forward(),它(忽略可选参数)看起来像:

def forward(self,src_tokens,src_lengths,prev_output_tokens):

所以我尝试手动创建空数据:

dummy_data = {'src_tokens':torch.zeros((1,256)),'src_lengths':torch.zeros((1,'prev_output_tokens':torch.zeros((1,256))}
writer.add_graph(trainer._model,dummy_data,verbose=True)

失败:

TypeError: forward() missing 2 required positional arguments: 'src_lengths' and 'prev_output_tokens'

如果我使用 kwargs 风格:

dummy_data = {'src_tokens':torch.zeros((1,**dummy_data,verbose=True)

它失败了:

TypeError: add_graph() got an unexpected keyword argument 'src_tokens'

我开始认为这可能是 add_graph() 中的一个限制,它只能与简单的 def forward(self,x): 一起使用?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)