首页 > 解决方案 > 如何在自定义 keras 层中使用 keras 层

问题描述

我正在尝试编写自己的 keras 层。在这一层中,我想使用一些其他的 keras 层。有没有办法做这样的事情:

class MyDenseLayer(tf.keras.layers.Layer):
  def __init__(self, num_outputs):
    super(MyDenseLayer, self).__init__()
    self.num_outputs = num_outputs

  def build(self, input_shape):
    self.fc = tf.keras.layers.Dense(self.num_outputs)

  def call(self, input):
    return self.fc(input)

layer = MyDenseLayer(10)

当我做类似的事情时

input = tf.keras.layers.Input(shape = (16,))
output = MyDenseLayer(10)(input)
model = tf.keras.Model(inputs = [input], outputs = [output])
model.summary()

它输出 在此处输入图像描述

我如何使那里的密集人群可以训练?

标签: tensorflowkeras

解决方案


如果您查看有关如何添加自定义图层的文档,他们建议您使用该.add_weight(...)方法。此方法在内部将所有权重放在self._trainable_weights. 所以要做你想做的事,你必须首先定义你想要使用的 keras 层,构建它们,复制权重,然后构建你自己的层。如果我更新您的代码,它应该类似于

class mylayer(tf.keras.layers.Layer):
    def __init__(self, num_outputs, num_outputs2):
        self.num_outputs = num_outputs
        super(mylayer, self).__init__()

    def build(self, input_shape):
        self.fc = tf.keras.layers.Dense(self.num_outputs)
        self.fc.build(input_shape)
        self._trainable_weights = self.fc.trainable_weights
        super(mylayer, self).build(input_shape)

    def call(self, input):
        return self.fc(input)

layer = mylayer(10)
input = tf.keras.layers.Input(shape=(16, ))
output = layer(input)
model = tf.keras.Model(inputs=[input], outputs=[output])
model.summary()

然后你应该得到你想要的 在此处输入图像描述


推荐阅读