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