Большое спасибо за подробное объяснение, вы только что спасли мой день.

ичок в Керасе. Мне нужна помощь в написании пользовательской функции потерь в кератах с бэкэндом TensorFlow для следующего уравнения потерь.

Параметры, передаваемые в функцию потерь:

y_true будет иметь форму(batch_size, N, 2), Здесь мы проходим N(x, y) координаты в каждом образце в партии.y_pred будет иметь форму(batch_size, 256, 256, N), Здесь мы передаем N предсказанных тепловых карт256 x 256 пикселей в каждом образце в пакете.

i[0, 255]

j[0, 255]

Mn(i, j) представляет значение в месте расположения пикселя(i, j) тогдаго прогнозируемая тепловая карта.

Mn∼(i, j) = Guassian2D((i, j), y_truen, std) где

std = standard deviation, то же стандартное отклонение для обоих размеров (5 пикселей).

y_truen затемго (х, у) координата. Это среднее.

$18 будет иметь форму19$Оценка позы человека.

Примечание: я упомянул batch_size в форме y_true и y_pred. Я предположил, что Keras вызывает функцию потерь для всей партии, а не для отдельных выборок в партии. Поправь меня, если я ошибаюсь.

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

Это код, который я написал до сих пор. Я знаю, что это не будет работать, так как мы не можем использовать прямые нудистые ndarrays внутри функции потери keras. Также мне нужно устранить петли!

Ответы на вопрос(1)

Ваш ответ на вопрос