【问题标题】:How to implement pairwise hinge loss in Keras?如何在 Keras 中实现成对铰链损失?
【发布时间】:2019-06-08 18:37:06
【问题描述】:

我正在尝试为两个 200 维的张量实现成对铰链损失。目标是使用这两个张量的余弦相似度作为评分函数,并使用成对铰链损失训练模型。

该模型接受两个文本输入,它们已被转换为两个 200 维向量。 (第二个文本输入是第一个文本输入的正确标签)。

谁能告诉我如何在 Keras 中实现它?

def cosine_distance(vests):
    jd, jt = vests
    jd = K.l2_normalize(jd, axis=-1)
    jt = K.l2_normalize(jt, axis=-1)
    return -K.mean(jd * jt, axis=-1, keepdims=True)

def cos_dist_output_shape(shapes):
    shape1, shape2 = shapes
    return (shape1[0],1)

上面是我为 lambda 层计算余弦相似度的代码,jd 是第一个文本输入,jt 是第二个。

谢谢

【问题讨论】:

    标签: keras deep-learning nlp


    【解决方案1】:

    IIUC(CMIIW),你的模型有两个输入输出两个张量:

    ip1, ip2 = Input(shape=(20,)), Input(shape=(20,))
    backbone = Sequential()
    backbone.add(Dense(50, activation='relu'))
    backbone.add(Dense(200, activation='sigmoid'))
    op1, op2 = backbone(ip1), backbone(ip2)
    model = Model(inputs=[ip1, ip2], outputs=[op1, op2])
    

    要计算这两个输出张量的余弦距离,您的损失函数需要接受两个输入:

    def cosine_distance(jd, jt):
        jd = K.l2_normalize(jd, axis=-1)
        jt = K.l2_normalize(jt, axis=-1)
        return -K.mean(jd * jt, axis=-1, keepdims=True)
    

    最后用这个特定的损失编译:

    model.compile('sgd', loss=cosine_distance)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-01-14
      • 1970-01-01
      • 2019-09-09
      • 1970-01-01
      • 2021-09-09
      • 1970-01-01
      • 2019-09-17
      • 1970-01-01
      相关资源
      最近更新 更多