【问题标题】:How to access embeddings for triplet loss如何访问嵌入以进行三元组损失
【发布时间】:2021-06-14 03:34:39
【问题描述】:

我正在尝试创建一个带有三元组损失的连体网络,并且我正在使用 github 示例来帮助我。我对此相当陌生,我无法理解如何从模型中提取嵌入。下面是架构:

提取我在几页上找到的嵌入的代码是这样的:

def triplet_loss(y_true, y_pred):
anchor, positive, negative = y_pred[:,:emb_size], y_pred[:,emb_size:2*emb_size], y_pred[:,2*emb_size:]
positive_dist = tf.reduce_mean(tf.square(anchor - positive), axis=1)
negative_dist = tf.reduce_mean(tf.square(anchor - negative), axis=1)
return tf.maximum(positive_dist - negative_dist + alpha, 0.)

让我感到困惑的是我发现很难可视化矩阵,我不明白为什么锚点是 y[:,:emb_size],正数是 y_pred[:,emb_size:2emb_size] 和负数y_pred[:,2emb_size:].

如果需要更多上下文,完整代码:https://github.com/pranjalg2308/siamese_triplet_loss/blob/master/Siamese_With_Triplet_Loss.ipynb

【问题讨论】:

    标签: tensorflow keras conv-neural-network slice siamese-network


    【解决方案1】:

    在完整代码的sn-p中

    in_anc = Input(shape=(105,105,1))
    in_pos = Input(shape=(105,105,1))
    in_neg = Input(shape=(105,105,1))
    
    em_anc = embedding_model(in_anc)
    em_pos = embedding_model(in_pos)
    em_neg = embedding_model(in_neg)
    
    out = concatenate([em_anc, em_pos, em_neg], axis=1)
    
    siamese_net = Model(
        [in_anc, in_pos, in_neg],
        out
    )
    

    anchor、pos 和 neg 连接到一个输出张量,所以anchor 是 y_pred[:,:emb_size]...

    embedding_model.predict(np.expand_dims(anchor_image[3], axis=0)) 会提供您的嵌入。

    【讨论】:

    • 是的,但是为什么锚不是 y_pred[0] 而不是 y_pred[:,:emb_size]
    • @simon y_pred 是二维张量。第一个是batch_size,第二个是emb_size * 3。
    猜你喜欢
    • 2021-07-18
    • 2015-05-08
    • 1970-01-01
    • 2021-11-13
    • 1970-01-01
    • 2020-04-09
    • 2019-05-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多