Tensorflow Keras:如何使用另一个分类器给出的权重对编码器的输出进行加权相加?
我需要通过加权加法合并3个(或更多)编码器的多维输出,权重来自另一个分类器。我该怎么做 基本上我需要这样做(以矢量形式): 输出=点积([output1,output2,output3],w)=w1*output1+w2*output2+w3*output3 尺寸: output=output1=output2=output3=[无,16,16,512] w=[无,3]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]
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])
为了澄清,这将允许梯度流回到编码器,对吗?是的,没错,因为一切都是可微的。