В настоящее время я реализую триплетную сеть, чтобы распознать, описывают ли два изображения одну и ту же 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, можем ли мы подсчитать количество отрицательных примеров, у которых расстояние до якоря больше расстояния между якорем и положительным + полем?
Спасибомного за ваши ответы!