我有一个CNN模型,有两个输入,像这样:
input_a = tf.keras.layers.Input(shape=[128, 128, 3])
input_b = tf.keras.layers.Input(shape=[28, 28, 3])
conv_a = tf.keras.layers.Conv2D(32, 3, 2)(input_a)
conv_b = tf.keras.layers.Conv2D(32, 3, 2)(input_b)
dense_a = tf.keras.layers.Dense(1)(conv_a)
dense_b = tf.keras.layers.Dense(1)(conv_b)
combined = tf.keras.layers.Add()([dense_a, dense_b])
model = tf.keras.models.Model(inputs=[input_a, input_b], outputs=conbined)
我发现这个网络从input_b
分支学习了更多的信息,但我的设计是input_a
更重要,input_b
辅助input_a
。因此,我想为这两个图层设置不同的重要性,因为我想让input_a
更重要。我实现了一个加权层:
class WeightedAdd(tf.keras.layers.Layer):
def __init__(self, weight):
self.weight = weight
super(WeightedAdd, self).__init__()
def call(self, inputs, **kwargs):
return self.weight * inputs[0] + (1. - self.weight) * inputs[1]
def compute_output_shape(self, input_shape):
return input_shape[0]
现在,我用WeightedAdd:
代替我的Add<年代>= tf.keras.layers.Add相结合()([dense_a dense_b])
= WeightedAdd相结合(0.8)([dense_a dense_b])年代>
但是,它似乎不起作用。我该如何实现我的想法?
好!似乎管用~~。设置input_a
的权值像0.9999
一样大于input_b
,input_a
更新后的差值大于input_b
。但我不确定它是否适合我的想法。