keras似乎没有使用我定制的loss函数

ltqd579y  于 2021-08-20  发布在  Java
关注(0)|答案(0)|浏览(201)

我定义了一个三重态损耗函数,如下所示:

def triplet_loss(self, alpha):
    def loss(y_true, y_pred):
        anc, pos, neg = (
            y_pred[:, :emb_size],
            y_pred[:, emb_size : 2 * emb_size],
            y_pred[:, 2 * emb_size :],
        )
        distance1 = tf.sqrt(tf.reduce_sum(tf.pow(anc - pos, 2), 1, keepdims=True))
        distance2 = tf.sqrt(tf.reduce_sum(tf.pow(anc - neg, 2), 1, keepdims=True))
        return tf.reduce_mean(tf.maximum(distance1 - distance2 + alpha, 0.0))
    return loss

然后我用我的模型编译它:

optimizer = SGD(
    lr=self.learning_rate,
    # lr_multipliers=learning_rate_multipliers,
    momentum=0.5,
)

self.model.compile(
    loss=self.triplet_loss(
        alpha=margin,
        # emb_dim=emb_size
    ),
    optimizer=optimizer,
)

然后,模型开始使用 self.model.train_on_batch(data) ,
迭代1/10000:列车损失:4.558698,lr=0.001000
迭代2/10000:列车损失:4.558681,lr=0.001000
迭代3/10000:列车损失:4.558654,lr=0.001000
迭代4/10000:列车损失:4.558623,lr=0.001000
然而,问题是我甚至没有通过考试 emb_size 到损失函数。我试着删除函数中的所有内容 loss 在我的损失函数中:

def triplet_loss(self, alpha):
    def loss(y_true, y_pred):
        print("My loss function")

    return loss

并再次运行培训计划,培训仍能正常进行:
迭代1/10000:列车损失:4.556189,lr=0.001000
迭代2/10000:列车损失:4.556171,lr=0.001000
迭代3/10000:列车损失:4.556145,lr=0.001000
所以我认为keras根本没有使用我的损失函数,为什么会发生这种情况?我应该如何解决此问题?

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题