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

时间:2020-07-02 23:00:58

标签: python tensorflow keras keras-layer tf.keras

我正在使用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写入调用函数是非法的吗?如果是这样,如何为不同的图层定义不同的度量标准名称?

0 个答案:

没有答案