自定义层中的预定义层

2024-06-25 23:43:08 发布

您现在位置:Python中文网/ 问答频道 /正文

我想在自定义层中使用tf.keras.layers中的预定义层。我想创建一个自定义层,它是密集层和一维卷积层的组合。 有可能这样做吗?我在tensorflow页面中找不到一个例子


Tags: layerstftensorflow页面卷积例子keras密集
1条回答
网友
1楼 · 发布于 2024-06-25 23:43:08

从您的问题中,我了解到您希望利用类基API来定义自己的构建块/层/模型,该构建块/层/模型封装了两个预定义的层

import tensorflow as tf

class MyLayer(tf.keras.Sequential):
    def __init__(self, **kwargs):
        super(MyLayer, self).__init__(**kwargs)
        self.add(tf.keras.layers.Dense(1, input_shape=[10], use_bias=False))  # Use a first predefined layer
        self.add(tf.keras.layers.Layer())  # Use a second predefined layer

if __name__ == '__main__':
    l = MyLayer()
    print(l.summary())
    print(l(tf.constant([[0] * 10])))

不过,最好的解决方案是继承tf.keras.layers.Layer类并正确重写call方法,但可能需要更多行


编辑

层实现并不是那么困难:

class MyLayer(tf.keras.layers.Layer):
    def __init__(self, name="MyLayer", **kwargs):
        super(MyLayer, self).__init__(name=name, **kwargs)
        self.layer1 = tf.keras.layers.Dense(1, use_bias=False)
        self.layer2 = tf.keras.layers.Layer()

    def call(self, inputs):
        return self.layer2(self.layer1(inputs))

在实例化时需要更多:

if __name__ == '__main__':
    i = tf.constant([[0] *10])
    m_input = tf.keras.Input(shape=(10,))
    l = MyLayer()
    m_output = l(m_input)
    m = tf.keras.Model(inputs=m_input, outputs=m_output)
    tf.print(m.summary())
    tf.print(m(i))

我认为这是实现您的要求的正确方法,但我从未真正理解从Model继承还是从Layer继承的区别。看看dedicated guide并给我你的反馈

相关问题 更多 >