Keras自定义layer/constraint实现等权重

Keras custom layer/constraint to implement equal weights

我想在 Keras 中创建一个层,这样:

y = Wx + c

其中 W 是具有以下形式的分块矩阵:

A 和 B 是方阵,其元素为:

并且c是具有重复元素的偏置向量:

如何实施这些限制?我在想它可以在初始化权重时在 MyLayer.build() 中实现,也可以作为我可以指定某些索引相等的约束,但我不确定如何这样做。

您可以使用 Concatenate 层定义这样的 W。

import keras.backend as K
from keras.layers import Concatenate

A = K.placeholder()
B = K.placeholder()

row1 = Concatenate()([A, B])
row2 = Concatenate()([B, A])
W = Concatenate(axis=1)([row1, row2])

示例评估:

import numpy as np

get_W = K.function(outputs=[W], inputs=[A, B])
get_W([np.eye(2), np.ones((2,2))])

Returns

[array([[1., 0., 1., 1.],
        [0., 1., 1., 1.],
        [1., 1., 1., 0.],
        [1., 1., 0., 1.]], dtype=float32)]

要找出确切的解决方案,您可以使用 placeholdershape 参数。加法和乘法非常简单。