Python 自定义层中的预定义层
我想在自定义层中使用tf.keras.layers中的预定义层。我想创建一个自定义层,它是密集层和一维卷积层的组合。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
有可能做那样的事吗?我在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))
我认为这是实现您的要求的正确方法,但我从未真正理解从
模型
或从层
继承的区别。看一看,给我你的反馈 您是要分别向这两个层提供不同的数据,还是要添加这两个层(您将向其中提供数据)?