RuntimeError: неверный аргумент 0: размеры тензоров должны совпадать, за исключением измерения 2. Получил 6 и 64 в измерении 0 - PullRequest
0 голосов
/ 22 января 2020

Я пытаюсь преобразовать массив тензоров в один тензор.

def forward(self, input, bio, feats, hidden=None):
        .....
        .....
        featsEmb = [self.feat_lut(feat) for feat in feats[0]] 
        featsEmb = torch.cat(featsEmb, dim=-1)

При попытке запустить приведенный выше код я получил эту ошибку:
RuntimeError: неверный аргумент 0: Размеры тензоров должны совпадать, кроме как в измерении 2. Получил 6 и 1 в измерении 0

Поэтому я использовал pad_sequence, чтобы соответствовать измерению

featsEmb = [self.feat_lut(feat) for feat in feats[0]]


featsEmb = (pad_sequence(featsEmb, batch_first=True))
featsEmb = torch.cat(tuple(featsEmb), dim=-1)

Но теперь я получаю другое измерение ошибка:
RuntimeError: неверный аргумент 0: размеры тензоров должны совпадать, кроме как в измерении 2. Получил 6 и 64 в измерении 0

Я напечатал и проверил размеры и все измерения являются правильными.

print("Shape:------------>")
print((len(featsEmb))
        for i in range(len(featsEmb)):
            print("feat[%d]: %d" % (i, len(featsEmb[i]) ))

            for j in range(len(featsEmb[i])):
                print("feat[%d][%d]: %d" % (i,j, len(featsEmb[i][j]) ))
            print()
Shape:------------>
3

feat[0]: 6
feat[0][0]: 64
feat[0][1]: 64
feat[0][2]: 64
feat[0][3]: 64
feat[0][4]: 64
feat[0][5]: 64

feat[1]: 6
feat[1][0]: 64
feat[1][1]: 64
feat[1][2]: 64
feat[1][3]: 64
feat[1][4]: 64
feat[1][5]: 64

feat[2]: 6
feat[2][0]: 64
feat[2][1]: 64
feat[2][2]: 64
feat[2][3]: 64
feat[2][4]: 64
feat[2][5]: 64

Как я могу устранить эту ошибку и правильно объединить тензоры? Я использую последнюю версию PyTorch, и код был написан на Pytorch v0.4.0

. Любая помощь будет принята с благодарностью. Заранее спасибо.

...