加入2个keras层的输出
我正在尝试使用KERAS实现联合模型,这是该模型的架构。
但是,我在子网和主网络的输入串联串联时很难。以下是我的代码:
import tensorflow as tf
from tensorflow.keras import layers
from tensorflow.keras.datasets import mnist
from tensorflow.keras.models import Model, Sequential
from tensorflow.keras.layers import Conv2D, MaxPooling2D, Dense, Flatten, Reshape, Concatenate
def Autoencoder():
input = layers.Input(shape=(256, 256, 5))
layers.Flatten()
x = layers.Conv2D(32, (3, 3), activation="relu", padding="same")(input)
x = layers.Conv2D(32, (3, 3), activation="relu", padding="same")(x)
x = layers.MaxPooling2D((2, 2), padding="same")(x)
x = layers.Conv2D(64, (3, 3), activation="relu", padding="same")(x)
x = layers.Conv2D(64, (3, 3), activation="relu", padding="same")(x)
x = layers.MaxPooling2D((2, 2), padding="same")(x)
x = layers.Conv2D(128, (3, 3), activation="relu", padding="same")(x)
x = layers.Conv2D(128, (3, 3), activation="relu", padding="same")(x)
x = layers.MaxPooling2D((2, 2), padding="same", name='last_layer')(x)
autoencoder = Model(input, x)
return autoencoder.get_layer('last_layer')
def Subnetwork():
input = layers.Input(shape=(12,1))
x = layers.Flatten()(input)
x = layers.Dense(4096, activation="relu")(x)
x = layers.Reshape((32, 32, 4), name='last_layer')(x)
subnetwork = Model(input, x)
return subnetwork.get_layer('last_layer')
def Joint():
layer_autoencoder = Autoencoder()
layer_subnetwork = Subnetwork()
merged= Concatenate([layer_autoencoder, layer_subnetwork])
model = Model(inputs=[layer_autoencoder, layer_subnetwork], outputs=merged)
return model
Model = Joint()
Model.summary()
错误消息看起来像这样:
ValueError: Found unexpected instance while processing input tensors for keras functional model. Expecting KerasTensor which is from tf.keras.Input() or output from keras layer call(). Got: <keras.layers.pooling.MaxPooling2D object at 0x7fbfd8634990>
有人知道是什么原因导致错误,什么是正确的解决方案?
I am trying to implement a joint model using Keras, and this is the architecture of the model.
However, I have difficulty in the concatenation of inputs from the subnetwork and the main network. The following are my codes:
import tensorflow as tf
from tensorflow.keras import layers
from tensorflow.keras.datasets import mnist
from tensorflow.keras.models import Model, Sequential
from tensorflow.keras.layers import Conv2D, MaxPooling2D, Dense, Flatten, Reshape, Concatenate
def Autoencoder():
input = layers.Input(shape=(256, 256, 5))
layers.Flatten()
x = layers.Conv2D(32, (3, 3), activation="relu", padding="same")(input)
x = layers.Conv2D(32, (3, 3), activation="relu", padding="same")(x)
x = layers.MaxPooling2D((2, 2), padding="same")(x)
x = layers.Conv2D(64, (3, 3), activation="relu", padding="same")(x)
x = layers.Conv2D(64, (3, 3), activation="relu", padding="same")(x)
x = layers.MaxPooling2D((2, 2), padding="same")(x)
x = layers.Conv2D(128, (3, 3), activation="relu", padding="same")(x)
x = layers.Conv2D(128, (3, 3), activation="relu", padding="same")(x)
x = layers.MaxPooling2D((2, 2), padding="same", name='last_layer')(x)
autoencoder = Model(input, x)
return autoencoder.get_layer('last_layer')
def Subnetwork():
input = layers.Input(shape=(12,1))
x = layers.Flatten()(input)
x = layers.Dense(4096, activation="relu")(x)
x = layers.Reshape((32, 32, 4), name='last_layer')(x)
subnetwork = Model(input, x)
return subnetwork.get_layer('last_layer')
def Joint():
layer_autoencoder = Autoencoder()
layer_subnetwork = Subnetwork()
merged= Concatenate([layer_autoencoder, layer_subnetwork])
model = Model(inputs=[layer_autoencoder, layer_subnetwork], outputs=merged)
return model
Model = Joint()
Model.summary()
The error message looks like this:
ValueError: Found unexpected instance while processing input tensors for keras functional model. Expecting KerasTensor which is from tf.keras.Input() or output from keras layer call(). Got: <keras.layers.pooling.MaxPooling2D object at 0x7fbfd8634990>
Do anyone know what causes the error and what is the correct solution?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
您还应该在
Joint
模型中重新定义输入层,还要注意
Autoencoder
和Subnetwork
。它们必须返回 TF 模型实例。所以他们变成:You should redefine the input layer also in the
Joint
modelPay attention also to
Autoencoder
andSubnetwork
. They must return TF model instances. So they become: