Implementando la función de pérdida personalizada en keras con diferentes tamaños para y_true y y_pred

Soy nuevo en Keras. Necesito ayuda para escribir una función de pérdida personalizada en keras con el backend TensorFlow para la siguiente ecuación de pérdida.

Los parámetros pasados a la función de pérdida son:

y_true estaría de forma(batch_size, N, 2). Aquí estamos pasando N(x, y) coordenadas en cada muestra en el lote.y_pred estaría de forma(batch_size, 256, 256, N). Aquí, estamos pasando N mapas de calor predichos de256 x 256 píxeles en cada muestra en el lote.

i[0, 255]

j[0, 255]

Mn(i, j) representa el valor en la ubicación del píxel(i, j) para entoncesth mapa de calor predicho.

Mn∼(i, j) = Guassian2D((i, j), y_truen, std) dónde

std = standard deviation, la misma desviación estándar para ambas dimensiones (5 px).

verdaderon es entoncesth (x, y) coordenada. Esta es la media.

$18 estaría de forma19$Estimación de pose humana.

Nota: mencioné batch_size en forma de y_true y y_pred. Supuse que Keras llama a la función de pérdida en todo el lote y no en muestras individuales en el lote. Corrígeme si estoy equivocado.

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 es el código que he escrito hasta ahora. Sé que esto no se ejecutará, ya que no podemos usar ndarrays numpy directos dentro de una función de pérdida de keras. ¡Además, necesito eliminar los bucles!

Respuestas a la pregunta(1)

Su respuesta a la pregunta