【发布时间】:2022-01-11 04:49:03
【问题描述】:
我有两个名为编码器的 Keras 模型,一个使用以下代码加入的解码器:-
model = tf.keras.Sequential()
model.add(encoder)
model.add(decoder)
在摘要中(使用 final_model.summary() ),我得到以下输出:-
有什么方法可以扩展sequential_16 和sequential_17(检查附上的图片)以查看所有图层?这是编码器和解码器的代码:-
def vgg16_encoder(input_shape):
model = Sequential()
model.add(Conv2D(64, (3,3), padding ="same", activation = "relu", input_shape=input_shape))
model.add(Conv2D(64, (3,3), padding ="same", activation = "relu"))
model.add(MaxPooling2D((2,2), strides=(2, 2)))
model.add(Conv2D(128, (3,3), padding = "same", activation = "relu"))
model.add(Conv2D(128, (3,3), padding = "same", activation = "relu"))
model.add(MaxPooling2D((2,2), strides=(2, 2)))
model.add(Conv2D(256, (3,3), padding = "same", activation = "relu"))
model.add(Conv2D(256, (3,3), padding = "same", activation = "relu"))
model.add(Conv2D(256, (3,3), padding = "same", activation = "relu"))
model.add(MaxPooling2D((2,2), strides=(2, 2), name = 'block3_pool'))
model.add(Conv2D(512, (3,3), padding = "same", activation = "relu"))
model.add(Conv2D(512, (3,3), padding = "same", activation = "relu"))
model.add(Conv2D(512, (3,3), padding = "same", activation = "relu"))
model.add(MaxPooling2D((2,2), strides=(2, 2), name = 'block4_pool'))
model.add(Conv2D(512, (3,3), padding = "same", activation = "relu"))
model.add(Conv2D(512, (3,3), padding = "same", activation = "relu"))
model.add(Conv2D(512, (3,3), padding = "same", activation = "relu"))
model.add(MaxPooling2D((2,2), strides=(2, 2), name = 'block5_pool'))
model.add(Flatten(name='flatten'))
return model
def decoder():
model = tf.keras.Sequential()
dropout = 0.4
depth = 64 *4
dim = 8
model.add(Dense(dim*dim*depth, input_dim=2048))
model.add(BatchNormalization(momentum=0.9))
model.add(Activation('relu'))
model.add(Reshape((dim, dim, depth)))
model.add(Dropout(dropout))
model.add(UpSampling2D())
model.add(Conv2DTranspose(int(depth/2), 5, padding='same'))
model.add(BatchNormalization(momentum=0.9))
model.add(Activation('relu'))
model.add(UpSampling2D())
model.add(Conv2DTranspose(int(depth/4), 5, padding='same'))
model.add(BatchNormalization(momentum=0.9))
model.add(Activation('relu'))
model.add(Conv2DTranspose(int(depth/8), 5, padding='same'))
model.add(BatchNormalization(momentum=0.9))
model.add(Activation('relu'))
model.add(UpSampling2D())
model.add(Conv2DTranspose(3, 5, padding='same'))
model.add(Activation('tanh'))
return model
def autoencoder(encoder , decoder):
model = tf.keras.Sequential()
model.add(encoder)
model.add(decoder)
return model
IMG_WIDTH = 64
IMG_HEIGHT = 64
encoder = vgg16_encoder((IMG_HEIGHT, IMG_WIDTH,3))
decoder=decoder()
model=autoencoder(encoder,decoder)
注意:我使用的是 Tensorflow 版本:- 2.4.0。我对查看单个模型(编码器、解码器)摘要不感兴趣,但对它们的联合模型摘要感兴趣。
【问题讨论】:
-
给一个可复现的代码,你的tf版本是多少?
-
@M.Innat 我已将其添加到问题中。并且可能不是版本问题,而是 tf 的默认行为。
-
请添加即插即用代码。使用当前给定的代码,它会给出
TypeError: The added layer must be an instance of class Layer. Received: layer=<function encoder at 0x7fee874875f0> of type <class 'function'>。 -
Ops,我已经放了功能 API 代码,检查新的,我也测试过。只需复制并粘贴所有代码
标签: python tensorflow keras