问题描述
我从阅读教程中得到的印象是这很容易:打个电话给 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 (将#修改为@)