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)]
要找出确切的解决方案,您可以使用 placeholder
的 shape
参数。加法和乘法非常简单。
我想在 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)]
要找出确切的解决方案,您可以使用 placeholder
的 shape
参数。加法和乘法非常简单。