У меня есть «простая» задача машинного перевода, где у меня есть последовательность векторов, которые нужно сопоставить слову или двум. (вектор 258 измерений)
Например:
[[1, ..., 2], [3, ..., 4]]
=> "привет" [[1, ..., 2], [3, ..., 4], [5, ..., 6]]
=> "привет мир"
Для целевого поля я использую Field(eos_token="<eos>", is_target=True)
, который при пакетной обработке дает мне тензор с отступом, в этом случае:
tensor([
[1, 1], # 1 is "hello"
[2, 3], # 2 is "world", 3 is <eos>
[3, 0], # 0 is <pad>
])
Однако src
поле заполняется не так, как sequential
, но не имеет словаря (Field(use_vocab=False)
).
Когда я читаю src
из BucketIterator
в пакете размером> 1, я получаю:
Traceback (последний последний вызов):
Файл "train.py", строка 50, в поезде
for b, batch in enumerate(train_iter):
Файл "/torchtext/data/iterator.py", строка 156, в iter
yield Batch(minibatch, self.dataset, self.device)
Файл "/torchtext/data/batch.py", строка 34, в init
setattr(self, name, field.process(batch, device=device))
Файл "/torchtext/data/field.py", строка 237, в процессе
tensor = self.numericalize(padded, device=device)
Файл "/ torchtext / data / field .py ", строка 359, в числовом виде
var = torch.tensor(arr, dtype=self.dtype, device=device)
ValueError: ожидаемая последовательность длиной 258 при dim 2 (получено 5) * 10 50 *
То, что я хочу получить, это тензор:
tensor([
[[1, ..., 2], [1, ..., 2]],
[[3, ..., 4], [3, ..., 4]],
[[5, ..., 6], [0, ..., 0]],
[[0, ..., 0], [0, ..., 0]],
])
То, что я думаю Я мог бы иметь, но не знаю, как это подтвердить:
tensor([
[[1, ..., 2], [1, ..., 2]],
[[3, ..., 4], [3, ..., 4]],
[[5, ..., 6], 0],
[0, 0],
])