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