Каков наилучший способ реализации метрики NCA в Керасе? - PullRequest
0 голосов
/ 07 мая 2019

Метрика, которую я хочу реализовать, - это Анализ компонентов соседства, который поясняется ниже:

enter image description here

enter image description here

И моя реализация до сих пор такова:

def NCA2(y_pred, y_true, batch_size):
  j_total = []

  for i in range (batch_size):
    y_pred1 = y_pred[i]
    y_true1 = y_true[i]
    label1 = tf.argmax(y_true1)
    label1 = tf.cast(label1, tf.float32)

    y_pred_rest = [y_pred[j] for j in range(batch_size) if j!=i ]
    y_pred_rest = tf.stack(y_pred_rest, axis = 0)

    y_true_rest = [y_true[j] for j in range(batch_size) if j!= i ]
    y_true_rest = tf.stack(y_true_rest, axis = 0)
    label_rest = tf.argmax(y_true_rest, axis = 1)
    label_rest = tf.cast(label_rest, tf.float32)

    mask_sim = [tf.equal(label_rest[j], label1) for j in range(batch_size-1)]
    mask_sim = tf.stack(mask_sim, axis = 0)
    label3 = tf.cast(mask_sim, tf.float32)

    d_all= tf.exp(-tf.reduce_sum(input_tensor=tf.square(tf.subtract(y_pred_rest, y_pred1)), axis = 1))

    sum_sim = tf.reduce_sum(tf.multiply(d_all, label3))
    sum_diff=  tf.reduce_sum(tf.multiply(d_all, label3))

    p = tf.divide(sum_sim, sum_diff)

    j_total.append(p)

j_total = tf.stack(j_total, axis = 0)
j_total = tf.reduce_sum(j_total)
return j_total

По сути, я перебираю серию примеров (вместо всего обучающего набора), затем для каждого примера я нашел похожие примеры и примеры дистилляторов.и нашли расстояние между указанным примером и двумя наборами похожих и разнородных примеров.И возьмите экспоненту этих расстояний и разделите все похожие расстояния на все разные расстояния.Это не совсем то же самое уравнение.Так вот почему дайте мне Нэн при обучении.

Мой вопрос: хочу ли я сделать то же самое из уравнения выше в кератах, как я могу это сделать.т.е. делим один пример за раз на все другие примеры вместо того, чтобы брать все одинаковые расстояния и определять все разные расстояния.

Возможно ли это?Или есть какая-то лучшая идея для этого показателя.

Большое спасибо заранее.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...