我想将以下函数编码为TS层。令x为d维向量。
x-> tf.linalg.diag(x)* A + b,
其中A是可训练的 dxd矩阵,b是可训练的(d维)向量。
如果A和b不在那里,我会使用Lambda层,但是既然它们在...我将如何处理。
P.s .:出于教育上的考虑,我不想喂食lambda层:
Lambda(lambda x: tf.linalg.diag(x)))
进入具有“身份”激活的完全连接层。 (我知道这行得通,但实际上并不能帮助我学习如何解决问题:))
答案 0 :(得分:0)
您可以创建自定义图层,然后将函数放入调用方法中。
class Custom_layer(keras.layers.Layer):
def __init__(self, dim):
super(Custom_layer, self).__init__()
self.dim = dim
# add trainable weight
self.weight = self.add_weight(shape=(dim,dim),trainable=True)
# add trainable bias
self.bias = self.add_weight(shape=(dim))
def call(self, input):
# your function
return (tf.linalg.diag(input)*self.weight) + self.bias
def get_config(self):
config = super(Custom_layer, self).get_config()
config['dim'] = self.dim
return config
并像普通图层一样使用它,并在使用时为其提供尺寸参数。
my_layer = Custom_layer(desire_dimension)
output = my_layer(input)