Класс Concatenate
Класс Concatenate объединяет тензоры от нескольких слоев
в один тензор. Первым параметром передается ось объединения axis,
вдоль которой будет выполняться конкатенация. По умолчанию ось
равна -1. Класс полезен при построении моделей с несколькими
ветвями, когда выходы разных слоев нужно объединить перед
последующими слоями.
Синтаксис
tf.keras.layers.Concatenate(axis=-1)
Пример
Давайте объединим два одномерных тензора по последней оси:
import tensorflow as tf
layer = tf.keras.layers.Concatenate(axis=-1)
t1 = tf.constant([1, 2, 3])
t2 = tf.constant([4, 5, 6])
res = layer([t1, t2])
print(res)
Результат выполнения кода:
tf.Tensor([1 2 3 4 5 6], shape=(6,), dtype=int32)
Пример
Давайте объединим два двумерных тензора по оси 0:
import tensorflow as tf
layer = tf.keras.layers.Concatenate(axis=0)
t1 = tf.constant([[1, 2, 3], [4, 5, 6]])
t2 = tf.constant([[7, 8, 9]])
res = layer([t1, t2])
print(res)
Результат выполнения кода:
tf.Tensor(
[[1 2 3]
[4 5 6]
[7 8 9]], shape=(3, 3), dtype=int32)
Пример
Давайте объединим два двумерных тензора по оси 1:
import tensorflow as tf
layer = tf.keras.layers.Concatenate(axis=1)
t1 = tf.constant([[1, 2, 3], [4, 5, 6]])
t2 = tf.constant([[7, 8], [9, 10]])
res = layer([t1, t2])
print(res)
Результат выполнения кода:
tf.Tensor(
[[ 1 2 3 7 8]
[ 4 5 6 9 10]], shape=(2, 5), dtype=int32)
Пример
Давайте построим модель с двумя ветвями и объединим их выходы:
import tensorflow as tf
input_a = tf.keras.Input(shape=(4,))
input_b = tf.keras.Input(shape=(4,))
branch_a = tf.keras.layers.Dense(3)(input_a)
branch_b = tf.keras.layers.Dense(3)(input_b)
merged = tf.keras.layers.Concatenate(axis=-1)([branch_a, branch_b])
output = tf.keras.layers.Dense(1)(merged)
model = tf.keras.Model(inputs=[input_a, input_b], outputs=output)
model.summary()
Результат выполнения кода:
Model: "model"
__________________________________________________________________________________________________
Layer (type) Output Shape Param # Connected to
==================================================================================================
input_1 (InputLayer) [(None, 4)] 0 []
input_2 (InputLayer) [(None, 4)] 0 []
dense (Dense) (None, 3) 15 ['input_1[0][0]']
dense_1 (Dense) (None, 3) 15 ['input_2[0][0]']
concatenate (Concatenate) (None, 6) 0 ['dense[0][0]',
'dense_1[0][0]']
dense_2 (Dense) (None, 1) 7 ['concatenate[0][0]']
==================================================================================================
Total params: 37
Trainable params: 37
Non-trainable params: 0
__________________________________________________________________________________________________