В ряде случаев для того,чтобы подать 2D данные на вход слоя принимающего 3D данные необходимо их скопировать. Например, такая необходимость есть при создании seq2seq модели с attention в Keras. Это можно сделать с помощью Lambda слоя, но в Keras есть слой RepeatVector.
Слой RepeatVector добавляет размерность к датасету. Например, если входной shape (batch size, input size) и нужно скормить его GRU слою, то можно использовать слой RepeatVector для преобразования входных данных в shape с размерностью (batch size, sequence length, input size).
В примере ниже определена модель, которая повторяет фиксированное количество раз (6) поданные входные данные.
from tensorflow.keras.layers import Input, RepeatVector
from tensorflow.keras.models import Model
import numpy as np
inp = Input(shape=(2,))
# Define a RepeatVector that repeats the input 6 times
rep = RepeatVector(6)(inp)
model = Model(inputs=inp, outputs=rep)
#Входные данные
x = np.array([[0,1],[2,3]])
#Получаем ответ модели
y = model.predict(x)
print('x.shape = ',x.shape)
print(x)
print('y.shape = ',y.shape)
print(y)x.shape = (2, 2) [[0 1] [2 3]] y.shape = (2, 6, 2) [[[0. 1.] [0. 1.] [0. 1.] [0. 1.] [0. 1.] [0. 1.]] [[2. 3.] [2. 3.] [2. 3.] [2. 3.] [2. 3.] [2. 3.]]]