【问题标题】:Torchtext BucketIterator wrapper from tutorial produces SyntaxError教程中的 Torchtext BucketIterator 包装器产生 SyntaxError
【发布时间】:2018-10-09 10:56:05
【问题描述】:

我正在关注并在 Torchtext 上实现来自 this short tutorial 的代码,鉴于 Torchtext 的文档不佳,这一点令人惊讶地清晰。

创建迭代器(批处理生成器)后,他建议创建一个包装器以生成更多可重用的代码。 (参见教程中的第 5 步)。

该代码包含一个令人惊讶的长而奇怪的行,我不明白它并引发了 SyntaxError: invalid syntax。有人知道发生了什么吗?

(有问题的行是开头的行:if self.y_vars is <g [...])

class BatchWrapper:
  def __init__(self, dl, x_var, y_vars):
        self.dl, self.x_var, self.y_vars = dl, x_var, y_vars # we pass in the list of attributes for x <g class="gr_ gr_3178 gr-alert gr_spell gr_inline_cards gr_disable_anim_appear ContextualSpelling ins-del" id="3178" data-gr-id="3178">and y</g>

  def __iter__(self):
        for batch in self.dl:
              x = getattr(batch, self.x_var) # we assume only one input in this wrapper

              if self.y_vars is <g class="gr_ gr_3177 gr-alert gr_gramm gr_inline_cards gr_disable_anim_appear Grammar replaceWithoutSep" id="3177" data-gr-id="3177">not</g> None: # we will concatenate y into a single tensor
                    y = torch.cat([getattr(batch, feat).unsqueeze(1) for feat in self.y_vars], dim=1).float()
              else:
                    y = torch.zeros((1))

              yield (x, y)

  def __len__(self):
        return len(self.dl)

【问题讨论】:

  • 到目前为止,我已经为“try/except”更改了“if”条件。我不喜欢使用包罗万象的除外,但除此之外它似乎工作正常?我不确定它是否按预期工作,因为我不理解原始代码......

标签: python deep-learning pytorch torchtext


【解决方案1】:

是的,我想作者有一些错字。 我认为正确的代码是这样的:

if self.y_vars is not None:
    y = torch.cat([getattr(batch, feat).unsqueeze(1) for feat in self.y_vars], dim=1).float()
else:
    y = torch.zeros((1))

您也可以在第 3 行的评论中看到这个错字(在博文中的代码中)。

【讨论】:

  • 这是有道理的,是的,并且同意我使用 try/except 的解决方案。
猜你喜欢
  • 2019-06-15
  • 1970-01-01
  • 1970-01-01
  • 2017-12-22
  • 2014-03-20
  • 1970-01-01
  • 1970-01-01
  • 2014-07-28
  • 2017-07-31
相关资源
最近更新 更多