Tensorflow Keras:如何使用另一个分类器给出的权重对编码器的输出进行加权相加?

Tensorflow Keras:如何使用另一个分类器给出的权重对编码器的输出进行加权相加?,tensorflow,keras,Tensorflow,Keras,我需要通过加权加法合并3个(或更多)编码器的多维输出,权重来自另一个分类器。我该怎么做 基本上我需要这样做(以矢量形式): 输出=点积([output1,output2,output3],w)=w1*output1+w2*output2+w3*output3 尺寸: output=output1=output2=output3=[无,16,16,512] w=[无,3] None是为批处理分配的未知维度。对于一般数量的编码器,您可以执行以下操作: def f(x): w = x[-1]

我需要通过加权加法合并3个(或更多)编码器的多维输出,权重来自另一个分类器。我该怎么做

基本上我需要这样做(以矢量形式):

输出=点积([output1,output2,output3],w)=w1*output1+w2*output2+w3*output3

尺寸:

output=output1=output2=output3=[无,16,16,512]

w=[无,3]


None是为批处理分配的未知维度。

对于一般数量的编码器,您可以执行以下操作:

def f(x):
    w = x[-1]
    outputs = x[:-1]
    outputs_ = K.concatenate([o[:, None, ...] for o in outputs],
                             axis=1)  # Shape=(None, nb_outputs, 16, 16, 512)

    out = K.sum(w[..., None, None, None] * outputs_,
                axis=1)  # Shape=(None, 16, 16, 512)
    return out

outputs = [output1, output2, output3]  # Works with any number of outputs
output = Lambda(f)(outputs + [w])

为了澄清,这将允许梯度流回到编码器,对吗?是的,没错,因为一切都是可微的。