TypeError:_call__()接受2个位置参数,但keras tensorflow中给出了3个

2024-04-23 20:24:16 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在使用keras.layers.Layer编写一个自定义损失函数。代码如下:

class SIAMESE_LOSS(Layer):
    def __init__(self, index, **kwargs):
        super(SIAMESE_LOSS, self).__init__(**kwargs)
        self.index = index

    @staticmethod
    def mmd_loss(source_samples, target_samples, weights=1):
        return mmd(source_samples, target_samples, weights)

    def call(self, inputs, **kwargs):
        mmd_loss = self.mmd_loss(inputs[0], inputs[1])

        self.add_loss(mmd_loss, inputs=True)
        self.add_metric(mmd_loss, aggregation='mean', name='MMD_'+str(self.index))

        return inputs

但是如果我用[x2, x3] = SIAMESE_LOSS(index=1, name='siamese_loss_1')(x2, x3)调用它,就会出现一个错误:

TypeError: __call__() takes 2 positional arguments but 3 were given

是因为将self.index写入调用函数是非法的吗?如果是,如何为不同的层定义不同的度量名称


Tags: selflayersourcetargetindexinitdefkwargs