Триплетная сеть, функция потерь и равные расстояния - PullRequest
0 голосов
/ 31 мая 2018

В настоящее время я реализую триплетную сеть, чтобы распознать, описывают ли два изображения одну и ту же 3d-модель или нет, но у меня есть некоторые проблемы с результатами, расстояния между положительной привязкой всегда равны расстоянию между привязкой.отрицательный.

Вот код моей функции потерь:

    def triplet_loss(self):
    self.d_pos = tf.reduce_sum(tf.square(self.o1 - self.o2), axis=-1)
    self.d_neg = tf.reduce_sum(tf.square(self.o1 - self.o3), axis=-1)

    loss = tf.maximum(0.0, self.margin + (self.d_pos - self.d_neg))
    loss = tf.reduce_mean(loss)

    return loss

Где o1, o2 и o3 - выходные данные сверточных сетей с общими весами и нормализованные по партиям:

output = tf.layers.batch_normalization(inputs=output, axis=-1, momentum=0.9, epsilon=0.0001, center=True, scale=True, name='batch_3_norm')

И первые результаты следующие:

epoch 0:    batch:0   loss 0.0000199945   dneg : 0.079995   dpos; 0.079995 

epoch 0:    batch:1   loss 0.0000201295   dneg : 0.092946   dpos; 0.092946

epoch 0:    batch:2   loss 0.0000205572   dneg : 0.110583   dpos; 0.110583 

epoch 0:    batch:3   loss 0.0000216728   dneg : 0.122692   dpos; 0.122693 

epoch 0:    batch:4   loss 0.0000202223   dneg : 0.111207   dpos; 0.111207 

epoch 0:    batch:5   loss 0.0000200346   dneg : 0.105684   dpos; 0.105684 
############### Test set : batch:5   loss 0.000 

epoch 1:    batch:0   loss 0.0000207106   dneg : 0.105736   dpos; 0.105737 

epoch 1:    batch:1   loss 0.0000200992   dneg : 0.107299   dpos; 0.107299 

epoch 1:    batch:2   loss 0.0000207007   dneg : 0.111667   dpos; 0.111667 

epoch 1:    batch:3   loss 0.0000201932   dneg : 0.109080   dpos; 0.109081 

epoch 1:    batch:4   loss 0.0000206707   dneg : 0.111295   dpos; 0.111295 

(dneg и dpos - расстояния для положительных и отрицательных пар)

Так много вопросов:

  • как настроить маржу?Таким образом, разница между этими двумя расстояниями настолько мала, что я должен поставить очень маленькое поле?

  • Поскольку эти два расстояния равны, потери равны границе.Как избежать этой проблемы?

  • Как измерить точность триплетной сети?Например, если партия размером 100, можем ли мы подсчитать количество отрицательных примеров, у которых расстояние до якоря больше расстояния между якорем и положительным + полем?

Спасибомного за ваши ответы!

...