我想构建一个U-net架构,使用vgg16模型作为编码器,在Imagenet数据集上预先训练权重。对于上采样,我想将编码器中某些层的输出与解码部分连接起来。差不多是这样的(摘自TernausNet):
TernausNet
到目前为止,我的模型是这样的:from keras.applications.vgg16 import VGG16 as VGG16, preprocess_input
encode_model = VGG16(input_shape=(768,768,3), include_top=False, weights='imagenet')
encode_model.trainable = False
from keras import models, layers
input_img = layers.Input((768,768,3), name = 'RGB_Input')
# output and start upsampling
features = encode_model(input_img)
conv_1 = layers.Conv2D(512, (3,3), activation='relu', padding='same')(features)
up_conv = layers.Conv2DTranspose(256, (3,3), strides=(2,2), activation='relu', padding='same')(conv_1)
# first concatenation block
concat_1 = layers.concatenate([encode_model.get_layer('block5_conv3').output, up_conv], axis=-1, name='concat_1')
conv_2 = layers.Conv2D(512, (3,3), activation='relu', padding='same')(concat_1)
up_conv_2 = layers.Conv2DTranspose(256, (3,3), strides=(2,2), activation='relu', padding='same')(conv_2)
# second concatenation block
concat_2 = layers.concatenate([up_conv_2, encode_model.get_layer('block4_conv3').output])
conv_3 = layers.Conv2D(512, (3,3), activation='relu', padding='same')(concat_2)
up_conv_3 = layers.Conv2DTranspose(128, (3,3), strides=(2,2), activation='relu', padding='same')(conv_3)
# third concatenation block
concat_3 = layers.concatenate([up_conv_3, encode_model.get_layer('block3_conv3').output])
conv_4 = layers.Conv2D(256, (3,3), activation='relu', padding='same')(concat_3)
up_conv_4 = layers.Conv2DTranspose(64, (3,3), strides=(2,2), activation='relu', padding='same')(conv_4)
# fourth concatenation block
concat_4 = layers.concatenate([up_conv_4, encode_model.get_layer('block2_conv2').output])
conv_5 = layers.Conv2D(128, (3,3), activation='relu', padding='same')(concat_4)
up_conv_5 = layers.Conv2DTranspose(32, (3,3), strides=(2,2), activation='relu', padding='same')(conv_5)
# fifth concatenation block
concat_4 = layers.concatenate([up_conv_5, encode_model.get_layer('block1_conv2').output])
conv_6 = layers.Conv2D(128, (3,3), activation='sigmoid', padding='same')(concat_4)
final_model = models.Model(inputs=[input_img], outputs=[conv_6])
final_model.summary()
后来我编译并拟合模型:
^{pr2}$
然后我得到以下错误:Graph disconnected: cannot obtain value for tensor Tensor("input_4:0", shape=(?, 768, 768, 3), dtype=float32) at layer "input_4". The following previous layers were accessed without issue: []
我读到当输入和输出不是同一个图的一部分时就会发生这种情况。我想我可以把这两个图联系起来:input_img = layers.Input((768,768,3), name = 'RGB_Input')
# output and start upsampling
features = encode_model(input_img)
conv_1 = layers.Conv2D(512, (3,3), activation='relu', padding='same')(features)
我的错误是什么?在