我有一个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])

10-06 01:52