当前位置: 首页 > 知识库问答 >
问题:

使用keras图断开误差的VGG16预训练模型的U-Net模型

程志新
2023-03-14

我正在尝试使用 VGG16 编码器构建 U-Net 模型。这是模型代码。

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)

我收到以下错误。

ValueError:图断开连接:无法获取张量张量的值("input_1: 0",形状=(无,512,512,3),dtype=float32)在层"input_1"。

注意:input_1是VGG16型号的输入层

共有1个答案

龙高超
2023-03-14

您不需要定义额外的< code>Input层,因为< code>VGG16模型中已经有一个< code>Input层,您可以使用

inp = base_pretrained_model.input

您还可以使用以下命令获得VGG16模型的输出

output_vgg16_conv = base_pretrained_model.output

此外,要保持基本模型的权重VGG16不变,可以使每个层不可访问:

for layer in base_pretrained_model.layers:
    layer.trainable = False

希望有帮助。

 类似资料:
  • 本文向大家介绍Keras使用ImageNet上预训练的模型方式,包括了Keras使用ImageNet上预训练的模型方式的使用技巧和注意事项,需要的朋友参考一下 我就废话不多说了,大家还是直接看代码吧! 在以上代码中,我们首先import各种模型对应的module,然后load模型,并用ImageNet的参数初始化模型的参数。 如果不想使用ImageNet上预训练到的权重初始话模型,可以将各语句的中

  • 文章信息 通过本教程,你可以掌握技能:使用预先训练的词向量和卷积神经网络解决一个文本分类问题 本文代码已上传到Github 本文地址:http://blog.keras.io/using-pre-trained-word-embeddings-in-a-keras-model.html 本文作者:Francois Chollet 什么是词向量? ”词向量”(词嵌入)是将一类将词的语义映射到向量空间

  • 本文向大家介绍使用Keras预训练模型ResNet50进行图像分类方式,包括了使用Keras预训练模型ResNet50进行图像分类方式的使用技巧和注意事项,需要的朋友参考一下 Keras提供了一些用ImageNet训练过的模型:Xception,VGG16,VGG19,ResNet50,InceptionV3。在使用这些模型的时候,有一个参数include_top表示是否包含模型顶部的全连接层,如

  • /usr/local/lib/python3.6/dist-packages/keras/backend/tensorflow_backend.py:174:不推荐使用名称tf.get_default_session。请改用tf.compat.v1.get_default_session。 /usr/local/lib/python3.6/dist-packages/keras/backend/t

  • 问题内容: 一般来说,我只是从keras和机器学习开始。 我训练了一个模型来对2类图像进行分类,并使用进行保存。这是我使用的代码: 它成功地以0.98的准确度进行了训练,相当不错。为了在新图像上加载并测试该模型,我使用了以下代码: 它输出: [[0]] 为什么不给出类的实际名称,为什么? 提前致谢。 问题答案: keras Forecast_classes(docs)输出类别预测的numpy数组。

  • 问题内容: 我想知道是否有可能保存经过部分训练的Keras模型并在再次加载模型后继续进行训练。 这样做的原因是,将来我将拥有更多的训练数据,并且我不想再次对整个模型进行训练。 我正在使用的功能是: 编辑1:添加了完全正常的示例 对于10个纪元后的第一个数据集,最后一个纪元的损失将为0.0748,精度为0.9863。 保存,删除和重新加载模型后,第二个数据集上训练的模型的损失和准确性分别为0.171