象征性地向Tensorflow 2中的LSTM内核添加另一个变量

2024-03-28 16:43:12 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图理解在TF2.0中,是否可以象征性地将另一个TF.变量添加到LSTM(self.kernel)的权重变量中,我将在训练期间控制它(它本身可能是不可训练的)

例如:

    class AwesomeLSTM(tf.keras.layers.LSTM)

        def build(...)
            super().build(...)
            self.new_weight = self.add_weight(shape=self.kernel.shape, ...)
            self.kernel = self.kernel + self.new_weight

但是当我改变self.new_权重时,self.kernel的值没有改变。有什么想法吗


1条回答
网友
1楼 · 发布于 2024-03-28 16:43:12

我在我的一个项目中遇到了类似的问题(但不是在LSTM上)。 从我所能看出的问题是,当调用model.build()时,取的是self.new_weight的numpy值,而不是符号变量

一个对我有效的解决方法是在调用函数中添加新的_权重。在这种情况下,您需要一个不同的内核,以便添加不会聚合:

class my_LSTM(tf.keras.layers.LSTM):
    def build(self,input_shape):
        super().build(input_shape)
        self.new_weight = self.add_weight(shape=self.kernel.shape,trainable=False)
        self.actual_kernel = self.add_weight(shape=self.kernel.shape,trainable=True)

    def call(self,inputs,*args):
        self.kernel = self.actual_kernel+self.new_weight
        super().call(inputs,*args)

在测试时,您需要记住layer.kernel在再次调用层之前不会改变

希望这能有所帮助,当有人找到一种方法来象征性地做这件事时,我也会非常感兴趣

相关问题 更多 >