Implementando a função de perda personalizada em keras com tamanhos diferentes para y_true e y_pred

Eu sou novo em Keras. Preciso de ajuda para escrever uma função de perda personalizada em keras com back-end TensorFlow para a seguinte equação de perda.

Os parâmetros passados para a função de perda são:

y_true seria de forma(batch_size, N, 2). Aqui, estamos passando N(x, y) coordenadas em cada amostra do lote.y_pred seria de forma(batch_size, 256, 256, N). Aqui, estamos passando por N mapas de calor previstos de256 x 256 pixels em cada amostra do lote.

i[0, 255]

j[0, 255]

Mn(i, j) representa valor no local do pixel(i, j) para entãoº mapa de calor previsto.

Mn∼(i, j) = Guassian2D((i, j), y_truen, std) Onde

std = standard deviation, mesmo desvio padrão para as duas dimensões (5 px).

y_truen é entãoº (x, y) coordenada. Essa é a média.

$18 seria de forma19$Estimação de Pose Humana.

Nota: Mencionei batch_size na forma de y_true e y_pred. Supus que Keras chamasse a função de perda no lote inteiro e não em amostras individuais no lote. Corrija-me se eu estiver enganado.

def l2_loss(y_true, y_pred):
     loss = 0
     n = y_true.shape[0]
     for j in range(n):
        for i in range(num_joints):
            yv, xv = tf.meshgrid(tf.arange(0, im_height), tf.arange(0, im_width))
            z = np.array([xv, yv]).transpose(1, 2, 0)
            ground = np.exp(-0.5*(((z - y_true[j, i, :])**2).sum(axis=2))/(sigma**2))
            loss = loss + np.sum((ground - y_pred[j,:, :, i])**2)
     return loss/num_joints

Este é o código que escrevi até agora. Eu sei que isso não funcionará, pois não podemos usar ndarrays numpy diretos dentro de uma função de perda keras. Além disso, eu preciso eliminar loops!

questionAnswers(1)

yourAnswerToTheQuestion