Keras自定义图层/约束以实现相等的权重

时间:2018-02-21 19:48:53

标签: python-3.x keras keras-layer

我想在Keras中创建一个图层:

  

y = Wx + c

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

enter image description here

A和B是带有元素的方形矩阵:

enter image description here enter image description here

和c是具有重复元素的偏向量:

enter image description here

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

1 个答案:

答案 0 :(得分:4)

您可以使用Concatenate图层定义此类。

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))])

返回

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

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