BidirectionNet_conv_ltp.py 文件源码

python
阅读 28 收藏 0 点赞 0 评论 0

项目:image-text-matching 作者: llltttppp 项目源码 文件源码
def top_K_loss(self, sentence, image, K=50, margin=0.3):
    #  change: K=300, but i choose index 25 to 75 for training.
    #  so, the real 'K' is 50

        sim_matrix = tf.matmul(sentence, image, transpose_b=True)
    s_square = tf.reduce_sum(tf.square(sentence), axis=1)
    im_square = tf.reduce_sum(tf.square(image), axis=1)
    d = tf.reshape(s_square,[-1,1]) - 2 * sim_matrix + tf.reshape(im_square, [1, -1])
    positive = tf.stack([tf.matrix_diag_part(d)] * K, axis=1)
    length = tf.shape(d)[-1]
    d = tf.matrix_set_diag(d, 8 * tf.ones([length]))
    sen_loss_K ,_ = tf.nn.top_k(-1.0 * d, K, sorted=False) # note: this is negative value
    im_loss_K,_ = tf.nn.top_k(tf.transpose(-1.0 * d), K, sorted=False) # note: this is negative value
    #sen_loss_K = sen_loss_K[:, 25:75]
    #im_loss_K = im_loss_K[:, 25:75]
    sentence_center_loss = tf.nn.relu(positive + sen_loss_K + margin)
    image_center_loss = tf.nn.relu(positive + im_loss_K + margin)
    self.d_neg = (sen_loss_K + im_loss_K)/-2.0
    self.d_pos = positive        
    self.endpoint['debug/im_distance_topK'] = -1.0 * im_loss_K
    self.endpoint['debug/sen_distance_topK'] = -1.0 * sen_loss_K 
    self.endpoint['debug/d_Matrix'] = d
    self.endpoint['debug/positive'] = positive
    self.endpoint['debug/s_center_loss'] = sentence_center_loss
    self.endpoint['debug/i_center_loss'] = image_center_loss
    self.endpoint['debug/S'] = sim_matrix
    self.endpoint['debug/sentence_square'] = s_square
    self.endpoint['debug/image_square'] = im_square
        return tf.reduce_sum(sentence_center_loss),tf.reduce_sum(image_center_loss)
评论列表
文章目录


问题


面经


文章

微信
公众号

扫码关注公众号