自定义图层中的预定义图层

时间:2019-10-11 09:31:07

标签: python tensorflow tensorflow2.0

我想在自定义图层中使用tf.keras.layers中的预定义图层。我想创建一个由密集层和1D卷积层组成的自定义层。 可以做这样的事情吗?我在tensorflow页面上找不到示例。

1 个答案:

答案 0 :(得分:0)

根据您的问题,我了解您想利用基于类的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))

我认为这是实现您的要求的正确方法,但是我从来没有真正掌握过继承ModelLayer的区别。看看dedicated guide,并给我您的反馈!