我正在编写一个keras自定义丢失函数,其中我想传递给下面的函数:y_true,y_pred(这两个将自动传递),模型内层的权重和常量.
如下所示:
def Custom_loss(y_true, y_pred, layer_weights, val = 0.01):
loss = mse(y_true, y_pred)
loss += K.sum(val, K.abs(K.sum(K.square(layer_weights), axis=1)))
return loss
Run Code Online (Sandbox Code Playgroud)
但上面的实现给了我错误.我怎样才能在keras中实现这一目标?
我试图在训练样本中引入稀疏性。我的数据矩阵的大小为(比如说)NxP,我想通过一个层(keras 层)传递它,该层的权重与输入大小相同。即可训练权重矩阵 W 的形状为 NxP。我想对这一层进行输入矩阵的 hadamard 乘积(逐元素乘法)。W 将元素与输入相乘。在这种情况下如何获得 W 的可训练层?
编辑:顺便说一下,非常感谢您的快速回复。然而,我想要做的 hadamard 乘积是在两个矩阵之间,一个是输入,我们称之为 X,我的 X 是 NxP 的形状。而且我希望我在 hadamard 层中的内核与 X 的大小相同。因此内核也应该具有 NxP 的大小。两个矩阵的元素乘法是通过调用函数实现的。
但是当前的实现仅将内核大小指定为 P。另外,我尝试在构建中更改内核的形状,如下所示:
self.kernel = self.add_weight(name='kernel',
shape=input_shape,
initializer='uniform',
trainable=True)
Run Code Online (Sandbox Code Playgroud)
但它给了我以下错误:
类型错误:无法将类型的对象转换为张量。内容:(无,16)。考虑将元素转换为支持的类型。
这里 P 是 16,我会在运行时得到 N,N 与训练样本的数量相似。
预先感谢您的帮助。
keras ×2