Оболочка Torchtext BucketIterator из учебника выдает SyntaxError - PullRequest
0 голосов
/ 30 августа 2018

Я следую и реализую код из этого короткого руководства по Torchtext, что удивительно ясно, учитывая плохую документацию по Torchtext.

Когда Итератор создан (пакетный генератор), он предлагает создать оболочку для создания более многократно используемого кода. (См. Шаг 5 в руководстве).

Код содержит удивительно длинную и странную строку, которую я не понимаю и которая вызывает SyntaxError: неверный синтаксис . Кто-нибудь знает, что происходит?

(проблемная строка начинается с: если self.y_vars & amp; amp; lt; 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)

1 Ответ

0 голосов
/ 09 октября 2018

Да, я предполагаю, что есть некоторая опечатка от автора. Я думаю, что правильный кусок кода таков:

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 (в коде в посте).

...