Я пытаюсь преобразовать массив тензоров в один тензор.
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
. Любая помощь будет принята с благодарностью. Заранее спасибо.