關於對比損失(contrasive loss)的理解(相似度越大越相似的情況):
阿新 • • 發佈:2018-11-05
def contro_loss(self): ''' 總結下來對比損失的特點:首先看標籤,然後標籤為1是正對,負對部分損失為0,最小化總損失就是最小化類內損失(within_loss)部分, 讓s逼近margin的過程,是個增大的過程;標籤為0是負對,正對部分損失為0,最小化總損失就是最小化between_loss,而且此時between_loss就是s, 所以這個過程也是最小化s的過程,也就使不相似的對更不相似了 ''' s = self.similarity one = tf.constant(1.0) margin = 1.0 y_true = tf.to_float(self.y_true) # 類內損失: max_part = tf.square(tf.maximum(margin-s,0)) # margin是一個正對該有的相似度臨界值 within_loss = tf.multiply(y_true,max_part) #如果相似度s未達到臨界值margin,則最小化這個類內損失使s逼近這個margin,增大s # 類間損失: between_loss = tf.multiply(one-y_true,s) #如果是負對,between_loss就等於s,這時候within_loss=0,最小化損失就是降低相似度s使之更不相似 # 總體損失(要最小化): loss = 0.5*tf.reduce_mean(within_loss+between_loss) return loss