web-dev-qa-db-fra.com

Concaténation de deux tenseurs de dimensions différentes dans Pytorch

Est-il possible de concaténer deux tenseurs de dimensions différentes sans utiliser de boucle.

par exemple. Le tenseur 1 a des dimensions (15, 200, 2048) et le tenseur 2 a des dimensions (1, 200, 2048). Est-il possible de concaténer le 2ème tenseur avec le 1er tenseur le long des 15 indices de 1ère dimension au 1er tenseur (Diffuser le 2ème tenseur le long de la 1ère dimension du tenseur 1 en concaténant le long de la 3ème dimension du 1er tenseur)? Le tenseur résultant doit avoir des dimensions (15, 200, 4096).

Est-il possible d'accomplir cela sans boucle for?

9
adeelz92

Vous pouvez faire la diffusion manuellement (en utilisant Tensor.expand() ) avant la concaténation (en utilisant torch.cat() ):

import torch

a = torch.randn(15, 200, 2048)
b = torch.randn(1, 200, 2048)

repeat_vals = repeat_vals = [a.shape[0] // b.shape[0]] + [-1] * (len(b.shape) - 1)
# or directly repeat_vals = (15, -1, -1) or (15, 200, 2048) if shapes are known and fixed...
res = torch.cat((a, b.expand(*repeat_vals)), dim=-1)
print(res.shape)
# torch.Size([15, 200, 4096])
5
benjaminplanche