Объединить с каждой отметкой времени в Керасе - PullRequest
0 голосов
/ 04 марта 2019

У меня есть слой keras, который выводит N временных меток размера M (таким образом, размер NxM).Я хочу добавить один и тот же вектор размером 1xK ко всем меткам времени, поэтому на выходе должно быть N временных меток размера M + K.Если я использую слой Concatenate следующим образом:

x = Concatenate()[x, v]

Это дает ошибку, поскольку размеры не совпадают.И если я использую упаковку TimeDistributed, как это:

x = TimeDistributed(Concatenate())[x, v]

Это выдает ошибку, так как вектор v не имеет отметок времени.

Какой самый простой способ сделать это?

Спасибо !!

1 Ответ

0 голосов
/ 04 марта 2019

Во-первых, продублируйте ваш вектор N раз, используя RepeatVector:

v = RepeatVector(N)(v) # shape == (N, K)

Затем, когда их формы теперь совпадают ((N, M) и (N, K)), вы можете объединить их:

x = Concatenate()([x, v]) # shape == (N, M+K)

Если N неизвестно, вы можете сделать это вручную, используя соответствующие бэкэнд-функции в лямбда-слое:

from keras import backend as K

def func(xv):
    x, v = xv
    n = x.shape[1]
    v = K.repeat(v, n)
    return K.concatenate((x, v))

x = Lambda(lambda xv: func(xv))([x, v])
...