来自tensorflow keras示例。我可以创建一个递归包含线性层的自定义层
class MLPBlock(layers.Layer):
def __init__(self):
super(MLPBlock, self).__init__()
self.linear_1 = Linear(32)
self.linear_2 = Linear(32)
self.linear_3 = Linear(1)
def call(self, inputs):
x = self.linear_1(inputs)
x = tf.nn.relu(x)
x = self.linear_2(x)
x = tf.nn.relu(x)
return self.linear_3(x)
我如何访问自定义层的所有组成层,我想访问所有组成层的权重和偏差。
例如:
MLPBlock(Parent Layer):
linear_1
linear_2
linear_3
我研究了Tensorflow keras api版本1.14 https://www.tensorflow.org/guide/keras 但找不到任何方法。
答案 0 :(得分:0)
我假设您正在关注this tutorial。基于此,可以通过以下方式访问权重:
class MLPBlock(tf.keras.Model):
def __init__(self):
super(MLPBlock, self).__init__()
self.linear_1 = tf.keras.layers.Dense(32)
self.linear_2 = tf.keras.layers.Dense(32)
self.linear_3 = tf.keras.layers.Dense(1)
def call(self, inputs):
x = self.linear_1(inputs)
x = tf.nn.relu(x)
x = self.linear_2(x)
x = tf.nn.relu(x)
return self.linear_3(x)
mlp_block = MLPBlock()
y = mlp_block(tf.ones(shape=(3, 64)))
for layer in mlp_block.layers:
weights, biases = layer.get_weights()
请注意,我对示例进行了稍微修改,以便您可以访问图层的权重和偏差。即,我所做的不是用tf.keras.layers.Layer
子类化,而是用tf.keras.Model
子类化,以便可以将层的堆栈视为模型,然后可以访问该模型的层。然后,为了简单起见,我使用Linear
而不是使用自定义tf.keras.layers.Dense
层,但是,使用自定义层应该没有什么不同。