我想对来自不同 Keras 层的三个输出进行加权相加,以便权重是可训练的。我怎样才能做到这一点?我使用 tensorflow 2.0 作为 Keras 的后端。
如何在 keras 中执行三层的加权相加?
数据挖掘
喀拉斯
张量流
2022-03-12 04:27:17
2个回答
我在 keras 中使用子类化解决了这个问题。代码如下所示:
class Wt_Add(keras.layers.Layer):
def __init__(self, units=1, input_dim=1):
super(Wt_Add, self).__init__()
w_init = tf.random_normal_initializer()
self.w1 = tf.Variable(
initial_value=w_init(shape=(input_dim, units), dtype="float32"),
trainable=True,
)
self.w2 = tf.Variable(
initial_value=w_init(shape=(input_dim, units), dtype="float32"),
trainable=True,
)
self.w3 = tf.Variable(
initial_value=w_init(shape=(input_dim, units), dtype="float32"),
trainable=True,
)
def call(self, input1, input2, input3):
return tf.multiply(input1,self.w1) + tf.multiply(input2, self.w2) + tf.multiply(input3, self.w3)
用法:
wt_add = Wt_Add(1,1)
sum_layer = wt_add(input1, input2, input3)
您对图层有以下基本操作:
tf.keras.layers.Lambda所以你可以用一个简单的 lambda 操作将你的 3 层中的每一层相乘
layer1 = tf.keras.layers.Lambda(lambda x: x * weight1)(layer1)
layer2 = tf.keras.layers.Lambda(lambda x: x * weight2)(layer2)
layer3 = tf.keras.layers.Lambda(lambda x: x * weight3)(layer3)
然后是tf.keras.layers.Average允许平均层的:
average_layer = tf.keras.layers.Average()([layer1, layer2, layer3])
有点尴尬,我认为加权平均是最好的选择,但它似乎还没有在 Keras 中可用(据我所知)
其它你可能感兴趣的问题