Concatenar dos tensores con dimensiones diferentes.
Tengo dos tensores “a” y “b” que tienen dimensiones diferentes. “a” tiene forma [100,100] y “b” tiene forma [100,3,10]. Quiero concatenar estos dos tensores.
Por ejemplo:
a = torch.randn(100,100)
tensor([[ 1.3236, 2.4250, 1.1547, ..., -0.7024, 1.0758, 0.2841],
[ 1.6699, -1.2751, -0.0120, ..., -0.2290, 0.9522, -0.4066],
[-0.3429, -0.5260, -0.7748, ..., -0.5235, -1.8952, 1.2944],
...,
[-1.3465, 1.2641, 1.6785, ..., 0.5144, 1.7024, -1.0046],
[-0.7652, -1.2940, -0.6964, ..., 0.4661, -0.3998, -1.2428],
[-0.4720, -1.0981, -2.3715, ..., 1.6423, 0.0560, 1.0676]])
El tensor “b” es el siguiente:
tensor([[[ 0.4747, -1.9529, -0.0448, ..., -0.9694, 0.8009, -0.0610],
[ 0.5160, 0.0810, 0.1037, ..., -1.7519, -0.3439, 1.2651],
[-0.5975, -0.2000, -1.6451, ..., 1.3082, -0.4023, -0.3105]],
...,
[[ 0.4747, -1.9529, -0.0448, ..., -0.9694, 0.8009, -0.0610],
[ 0.1939, 1.0365, -0.0927, ..., -2.4948, -0.2278, -0.2390],
[-0.5975, -0.2000, -1.6451, ..., 1.3082, -0.4023, -0.3105]]],
dtype=torch.float64, grad_fn=<copybackwards>)
Quiero concatenar de manera que la primera fila en el tensor “a” de tamaño [100] se concatene con la primera fila en el tensor “b” de tamaño [3,10]. Esto debe aplicarse a todas las filas en ambos tensores. Es decir, en pocas palabras, considerando solo la primera fila en “a” y “b”, quiero obtener una salida de tamaño [100,130] de la siguiente manera:
[ 1.3236, 2.4250, 1.1547, …, -0.7024, 1.0758, 0.2841, 0.4747, -1.9529, -0.0448, …, -0.9694, 0.8009, -0.0610, 0.5160, 0.0810, 0.1037, …, -1.7519, -0.3439, 1.2651, -0.5975, -0.2000, -1.6451, …, 1.3082, -0.4023, -0.3105]
Para hacer esto, realicé “unsqueezed” al tensor “a” para obtener los dos tensores en las mismas dimensiones de la siguiente manera:
a = a.unsqueeze(1)
Cuando realizo “torch.cat([a,b])”, todavía obtengo un error. ¿Alguien puede ayudarme a resolver esto?
Gracias de antemano.
davy.ai
Para concatenar los dos tensores, primero deberá permutar el tensor
b
de modo que sus dimensiones coincidan con las del tensora
. Luego puede usar la funcióntorch.cat
para concatenar los dos tensores a lo largo de la segunda dimensión (dimensión 1) de la siguiente manera:Aquí, primero permutamos las dimensiones de
b
de [100,3,10] a [100,10,3] usandob.permute(0, 2, 1)
. Luego utilizamos el métodocontiguous
para asegurarnos de que los datos estén almacenados en un bloque de memoria contiguo para mejorar el rendimiento. Finalmente, podemos concatenar los dos tensores a lo largo de la segunda dimensión usandotorch.cat
condim=1
como segundo argumento.El tensor resultante tendrá una forma de [100, 130], siendo las primeras 100 columnas provenientes del tensor
a
y las últimas 30 columnas provenientes del tensorb
después de haber sido aplanados en una sola dimensión.