Python 自定义层中的预定义层

Python 自定义层中的预定义层,python,tensorflow,tensorflow2.0,Python,Tensorflow,Tensorflow2.0,我想在自定义层中使用tf.keras.layers中的预定义层。我想创建一个自定义层,它是密集层和一维卷积层的组合。 有可能做那样的事吗?我在tensorflow页面中找不到示例。从您的问题中,我了解到您希望利用类基API来定义自己的构建块/层/模型,该构建块/层/模型封装了两个预定义的层 import tensorflow as tf class MyLayer(tf.keras.Sequential): def __init__(self, **kwargs): s

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

从您的问题中,我了解到您希望利用类基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))

我认为这是实现您的要求的正确方法,但我从未真正理解从
模型
或从
继承的区别。看一看,给我你的反馈

您是要分别向这两个层提供不同的数据,还是要添加这两个层(您将向其中提供数据)?