[英]U-Net Model with VGG16 pretrained model using keras - Graph disconnected error
I am trying to build a U-Net model with a VGG16 encoder.我正在尝试使用 VGG16 编码器构建 U-Net 模型。 This is the model code.这是模型代码。
from keras.applications.vgg16 import VGG16
base_pretrained_model = VGG16(input_shape = shape, include_top = False, weights = 'imagenet')
base_pretrained_model.trainable = False
base_pretrained_model.summary()
inp = Input(shape=shape,name = 'image_input')
output_vgg16_conv = base_pretrained_model(inp)
# output and start upsampling
conv_1 = Conv2D(512, (3,3), activation='relu', padding='same')(output_vgg16_conv)
up_conv = Conv2DTranspose(256, (3,3), strides=(2,2), activation='relu', padding='same')(conv_1)
# first concatenation block
concat_1 = concatenate([base_pretrained_model.get_layer('block5_conv3').output, up_conv], axis=-1, name='concat_1')
conv_2 = Conv2D(512, (3,3), activation='relu', padding='same')(concat_1)
up_conv_2 = Conv2DTranspose(256, (3,3), strides=(2,2), activation='relu', padding='same')(conv_2)
# second concatenation block
concat_2 = concatenate([up_conv_2, base_pretrained_model.get_layer('block4_conv3').output])
conv_3 = Conv2D(512, (3,3), activation='relu', padding='same')(concat_2)
up_conv_3 = Conv2DTranspose(128, (3,3), strides=(2,2), activation='relu', padding='same')(conv_3)
# third concatenation block
concat_3 = concatenate([up_conv_3, base_pretrained_model.get_layer('block3_conv3').output])
conv_4 = Conv2D(256, (3,3), activation='relu', padding='same')(concat_3)
up_conv_4 = Conv2DTranspose(64, (3,3), strides=(2,2), activation='relu', padding='same')(conv_4)
# fourth concatenation block
concat_4 = concatenate([up_conv_4, base_pretrained_model.get_layer('block2_conv2').output])
conv_5 = Conv2D(128, (3,3), activation='relu', padding='same')(concat_4)
up_conv_5 = Conv2DTranspose(32, (3,3), strides=(2,2), activation='relu', padding='same')(conv_5)
# fifth concatenation block
concat_4 = concatenate([up_conv_5, base_pretrained_model.get_layer('block1_conv2').output])
conv_6 = Conv2D(128, (3,3), activation='sigmoid', padding='same')(concat_4)
finalModel = Model(inp, output = conv_6)
I get the following error.我收到以下错误。
ValueError: Graph disconnected: cannot obtain value for tensor Tensor("input_1:0", shape=(None, 512, 512, 3), dtype=float32) at layer "input_1". ValueError:图形断开连接:无法在“input_1”层获得张量 Tensor("input_1:0", shape=(None, 512, 512, 3), dtype=float32) 的值。 The following previous layers were accessed without issue: []访问以下先前层没有问题:[]
Note: input_1
is the input layer to VGG16 model注意: input_1
是 VGG16 模型的输入层
You don't need to define an additional Input
layer since one Input
layer is already there in the VGG16
model, which you can access by using您不需要定义额外的Input
层,因为VGG16
模型中已经存在一个Input
层,您可以使用
inp = base_pretrained_model.input
You also can get the output of VGG16
model by using您还可以通过使用获得VGG16
模型的输出
output_vgg16_conv = base_pretrained_model.output
Additionally, To keep the weights of base model VGG16
as it is, you can make each layer untrainable:此外,为了保持基础模型VGG16
的权重VGG16
,您可以使每一层都不可训练:
for layer in base_pretrained_model.layers:
layer.trainable = False
Hope it will help.希望它会有所帮助。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.