在Keras中实施NCA指标的最佳方法是什么

时间:2019-05-07 00:09:33

标签: python tensorflow keras

我要实现的指标是邻居成分分析,在下面进行了阐明:

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

基本上,我遍历一批示例(而不是整个训练集),然后为每个示例找到相似的示例和蒸馏器示例,并找到指定的示例与两组相似和不相似的示例之间的距离。然后取这些距离的指数,然后将所有相似的距离除以所有不同的距离。它不是完全相同的方程式。那就是为什么在训练时给我南。

我的问题是,我是否想与keras中的方程式完全相同,我该怎么做。即一次将一个示例除以所有其他示例,而不是采用所有相似的距离并由所有不同的距离决定。

有可能吗?还是对这个指标有更好的主意。

非常感谢。

0 个答案:

没有答案