Привет. Я пытался реализовать функцию потерь в керасе.Но я не смог придумать способ передать более 2 аргументов, кроме потерь (y_true, y_predict), поэтому я подумал об использовании лямбда-слоя в качестве последнего слоя и выполнении моих вычислений в его лямбда-слое и просто возвращал значение y_predictв такой функции потери
def loss_function(x):
loss = some calculations
return loss
def dummy_loss(y_true, y_pred):
return y_pred
def primary_network():
global prim_binary_tensor
x = VGG16(weights='imagenet', include_top=True, input_shape=image_shape)
last_layer = Dense(k_bit, activation='tanh', name='Dense11')(x.layers[-1].output)
last_layer, x = basic_model()
lambda_layer = Lambda(loss_function)([last_layer, prim_binary_tensor])
model = Model(inputs=[x.input, prim_binary_tensor], outputs=[lambda_layer])
model.compile(optimizer="adam", loss=dummy_loss,metrics=['accuracy'])
return model
Итак, мой вопрос:
1) Правильно ли я делаю это, чтобы рассчитать потери?Гарантируется ли, что функция лямбда-слоя вызывается для каждого изображения (input_data)?
2) Может кто-нибудь подсказать мне, как передать несколько аргументов в функцию потерь?
3) Можетконечный результат функции потерь - скаляр или вектор или матрица?