【发布时间】:2021-04-02 15:26:51
【问题描述】:
我想在 Keras 中创建一个由 2 个卷积层、一个展平层和一个密集层组成的模型。这将是一个具有共享权重的模型,因此没有任何预定义的输入层。
可以使用顺序方式:
model = tf.keras.models.Sequential()
model.add(tf.keras.layers.Conv2D(10,3,2,'valid',activation=tf.nn.relu))
model.add(tf.keras.layers.Conv2D(20,3,2,'valid',activation=tf.nn.relu))
model.add(tf.keras.layers.Flatten())
model.add(tf.keras.layers.Dense(200,activation=tf.nn.relu))
但是,使用 Functional API 会产生 TypeError:
model2 = tf.keras.layers.Conv2D(10,3,2,'valid',activation=tf.nn.relu)
model2 = tf.keras.layers.Conv2D(20,3,2,'valid',activation=tf.nn.relu)(model2)
model2 = tf.keras.layers.Flatten()(model2)
model2 = tf.keras.layers.Dense(200,activation=tf.nn.relu)(model2)
错误:
TypeError: Inputs to a layer should be tensors. Got: <tensorflow.python.keras.layers.convolutional.Conv2D object at 0x7fb060598100>
这样是不可能的,还是我错过了什么?
【问题讨论】:
-
不能添加输入层有什么具体原因吗?
-
在任何一个 API(顺序或函数)中都不可能,没有输入层的神经网络是没有意义的,你为什么要做这样的事情?
-
我想共享权重。所以 2 个单独的输入层,然后是几个共享的卷积层,然后是 2 个分离的层。当然可以只使用一个共享层 (stackoverflow.com/questions/49875127/…),但我还没有看到如何使用更多共享层的示例。但是,如果我尝试将它们中的更多链接在一起,则会出现错误。
标签: python tensorflow keras functional-api