我有一个keras层,输出N个大小为M的时间戳(因此为NxM大小)。我想将大小为1xK的相同向量附加到所有时间戳,因此输出应具有大小为M + K的N个时间戳。如果我像这样使用Concatenate层:
x = Concatenate()[x, v]
由于尺寸不匹配,因此会出现错误。如果我使用这样的TimeDistributed包装器:
x = TimeDistributed(Concatenate())[x, v]
由于向量v没有时间戳,因此会产生错误。
哪种方法最简单?
谢谢!!
最佳答案
首先,使用N
复制向量RepeatVector
次:
v = RepeatVector(N)(v) # shape == (N, K)
然后,由于它们的形状现在已经匹配(
(N, M)
和(N, K)
),因此可以将它们连接起来:x = Concatenate()([x, v]) # shape == (N, M+K)
如果未知
N
,则可以使用lambda层中的相应后端功能手动执行此操作: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])