Python 在功能性Keras模型中,如何将前几层的权重作为输入传递给客户层的调用函数?

Python 在功能性Keras模型中,如何将前几层的权重作为输入传递给客户层的调用函数?,python,keras,functional-programming,neural-network,tensor,Python,Keras,Functional Programming,Neural Network,Tensor,对于自定义层的调用方法,我需要一些先前层的权重,但我不需要修改它们,只需要访问它们的值。 我的价值如表1所示 但这会将权重作为numpy数组返回。 因此,我将它们转换为Tensor(使用来自Keras后端的tf.convert_to_Tensor),但是,在创建模型的那一刻,我出现了这样一个错误“'NoneType'对象没有属性'\u inbound_nodes'”。 我如何解决这个问题? 谢谢。TensorFlow提供了对变量进行分组的图形集合。要访问经过训练的变量,您可以调用tf.get_集

对于自定义层的调用方法,我需要一些先前层的权重,但我不需要修改它们,只需要访问它们的值。 我的价值如表1所示 但这会将权重作为numpy数组返回。 因此,我将它们转换为Tensor(使用来自Keras后端的tf.convert_to_Tensor),但是,在创建模型的那一刻,我出现了这样一个错误“'NoneType'对象没有属性'\u inbound_nodes'”。 我如何解决这个问题?
谢谢。

TensorFlow提供了对变量进行分组的图形集合。要访问经过训练的变量,您可以调用
tf.get_集合(tf.GraphKeys.TRAINABLE_variables)
或其缩写
tf.TRAINABLE_variables()
或使用
tf.get_集合(tf.GraphKeys.variables)
或其缩写
tf.all_variables()


您可以在初始化自定义图层类时传递该图层

自定义图层:

class CustomLayer(Layer):
    def __init__(self, reference_layer):
      super(CustomLayer, self).__init__()
      self.ref_layer = reference_layer # precedent layer

    def call(self, inputs):
        weights = self.ref_layer.get_weights()
        ''' do something with these weights '''
        return something
现在,您可以使用将该层添加到模型中


在这里,
自定义_层
可以访问层的权重
稠密

请添加代码,没有它错误就没有意义,并描述此层将使用weights@MariaLauraBennato不客气。这解决了你的问题吗,你测试过了吗?如果是,请用复选标记接受我的答案。
class CustomLayer(Layer):
    def __init__(self, reference_layer):
      super(CustomLayer, self).__init__()
      self.ref_layer = reference_layer # precedent layer

    def call(self, inputs):
        weights = self.ref_layer.get_weights()
        ''' do something with these weights '''
        return something
inp = Input(shape=(5))
dense = Dense(5)
custom_layer= CustomLayer(dense) # pass layer here

#model
x = dense(inp)
x = custom_layer(x)
model = Model(inputs=inp, outputs=x)