对于自定义层的调用方法,我需要一些先例层的权重,但我不需要修改它们,只需要访问它们的值。 我有如何在 Keras 中获取层的权重中建议的值? 但这以 Numpy 数组的形式返回权重。 所以我在 Tensor 中投射了它们(使用 Keras 后端的tf.convert_to_tensor(,但是,在创建模型的那一刻,我遇到了这个错误"'NoneType' 对象没有属性'_inbound_nodes'"。 如何解决此问题? 谢谢。
TensorFlow 提供了对变量进行分组的图形集合。要访问经过训练的变量,您需要调用tf.get_collection(tf.GraphKeys.TRAINABLE_VARIABLES)
或其速记tf.trainable_variables()
,或者获取所有变量(包括一些用于统计的变量(使用tf.get_collection(tf.GraphKeys.VARIABLES)
或其速记tf.all_variables()
tvars = tf.trainable_variables()
tvars_vals = sess.run(tvars)
for var, val in zip(tvars, tvars_vals):
print(var.name, val) # Prints the name of the variable alongside its value.
您可以在初始化自定义层类时传递此先例层。
自定义层:
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
现在,您可以使用函数式 API 将此层添加到模型中。
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)
在这里custom_layer
可以访问层dense
的权重。