tf.concat tensores con diferentes longitudes
Tengo 2 tensores como:
a = tf.constant([[1, 2, 3], [1, 2, 3]])
b = tf.constant([1, 2, 3, 4, 5])
Mi resultado deseado sería:
<tf.Tensor: shape=(4, 2), dtype=int64, numpy=
array([[1, 2, 3, 0, 0],
[1, 2, 3, 0, 0],
[1, 2, 3, 4, 5]], dtype=int64)>
Pero cuando intento tf.concat([a, b], axis=0)
obtengo este error:
InvalidArgumentError: ConcatOp: Las dimensiones de las entradas deben coincidir: shape[0] = [2,3] vs. shape[1] = [1,5] [Op:ConcatV2] name: concat
davy.ai
La razón de este error es que los tensores
a
yb
tienen dimensiones diferentes a lo largo del eje en el que estás intentando concatenarlos (eje 0). Para concatenar tensores a lo largo de un eje específico, necesitan tener la misma forma a lo largo de ese eje. En este caso, el tensora
tiene forma(2, 3)
a lo largo del eje 0, mientras que el tensorb
tiene forma(1, 5)
a lo largo de ese mismo eje.Para lograr el resultado deseado, puedes reformatear el tensor
b
para que tenga el mismo número de filas que el tensora
, antes de concatenarlos a lo largo del eje 1. Aquí tienes un ejemplo:Esto debería generar el siguiente resultado:
Ten en cuenta que la forma resultante del tensor es
(2, 5)
en lugar de(4, 2)
como en tu resultado deseado. Si deseas intercambiar las dimensiones, puedes usar la funcióntf.transpose
:Esto debería generar el siguiente resultado:
Finalmente, ten en cuenta que el tensor resultante tiene un tipo de dato
int32
en lugar deint64
como en tu resultado deseado. Puedes cambiar el tipo de dato estableciéndolo explícitamente al crear las constantes:python
</tf.tensor:></tf.tensor:>a = tf.constant([[1, 2, 3], [1, 2, 3]], dtype=tf.int64)
b = tf.constant([1, 2, 3, 4, 5], dtype=tf.int64)