Я пытаюсь реализовать двойную фокусную потерю из бумаги , и одной интересной идеей является пользовательский слой, у которого обучаемый параметр похож на альфа в исходной фокусной потере, но здесь он может быть обучаемым вместо фиксированного.
Идея - это умножение входного значения этого пользовательского слоя на обучаемый параметр (W_i) для каждого класса, а выходным будет ввод для softmax.
Изображение процесса
Мой вопрос о том, как реализовать этот W_i для умножения на входы, как я могу инициализировать его с помощью некоторого пользовательского вычисления? Это то, что у меня сейчас.
class ACW(tf.keras.layers.Layer):
def __init__(self, units=10):
super(ACW, self).__init__()
self.units = units
def build(self, input_shape):
self.w = self.add_weight(shape=(input_shape[-1], self.units),
initializer='random_uniform', # <- I THINK I ONLY NEED TO CHANGE THE INITIALIZER
trainable=True)
self.b = self.add_weight(shape=(self.units,),
initializer='zeros',
trainable=True)
def call(self, inputs):
return tf.matmul(inputs, self.w) + self.b