В ряде случаев для того,чтобы подать 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.]]]