我想在自定义图层中使用tf.keras.layers中的预定义图层。我想创建一个由密集层和1D卷积层组成的自定义层。 可以做这样的事情吗?我在tensorflow页面上找不到示例。
答案 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))
我认为这是实现您的要求的正确方法,但是我从来没有真正掌握过继承Model
或Layer
的区别。看看dedicated guide,并给我您的反馈!