首页 > 解决方案 > 错误:您正在尝试将包含 1 层的权重文件加载到具有 14 层的模型中

问题描述

由于没有足够的资源,例如 GPU 和 Ram,我们使用 Google Colab 来训练模型,但仍然存在一些限制,例如 Google Colab 的 GPU 的最大时间限制仅为 12 小时。我们仍然在这 12 小时内训练了模型,但在第一个 epoch 之后损失似乎没有改变,因此我们决定使用 Auto-Colorize 的代码,并且训练过的权重文件“colorize.hdf5”上传到 GitHub (可在 github 链接上找到代码: https ://github.com/hvvashistha/Auto-Colorize ),但在加载这些权重时,我们会遇到错误。

“您正在尝试将包含 1 层的权重文件加载到具有 14 层的模型中。”

在此处输入图像描述

我们尝试将 Keras 版本降级为 2.2.0 、 2.1.6 和 2.1.0 ,但错误没有解决。我们使用的模型结构与 GitHub 上提供的模型结构相同,但仍然会出现该错误。

模型: 这是模型架构

   #Inputs
embed_input = Input(shape=(1000,))
encoder_input = Input(shape=(256, 256, 1,))

#Encoder
encoder_output = Conv2D(64, (3,3), activation='relu', padding='same', strides=2,
                        bias_initializer=TruncatedNormal(mean=0.0, stddev=0.05))(encoder_input)
encoder_output = Conv2D(128, (3,3), activation='relu', padding='same',
                        bias_initializer=TruncatedNormal(mean=0.0, stddev=0.05))(encoder_output)
encoder_output = Conv2D(128, (3,3), activation='relu', padding='same', strides=2,
                        bias_initializer=TruncatedNormal(mean=0.0, stddev=0.05))(encoder_output)
encoder_output = Conv2D(256, (3,3), activation='relu', padding='same',
                        bias_initializer=TruncatedNormal(mean=0.0, stddev=0.05))(encoder_output)
encoder_output = Conv2D(256, (3,3), activation='relu', padding='same', strides=2,
                        bias_initializer=TruncatedNormal(mean=0.0, stddev=0.05))(encoder_output)
encoder_output = Conv2D(512, (3,3), activation='relu', padding='same',
                        bias_initializer=TruncatedNormal(mean=0.0, stddev=0.05))(encoder_output)
encoder_output = Conv2D(512, (3,3), activation='relu', padding='same',
                        bias_initializer=TruncatedNormal(mean=0.0, stddev=0.05))(encoder_output)
encoder_output = Conv2D(256, (3,3), activation='relu', padding='same',
                        bias_initializer=TruncatedNormal(mean=0.0, stddev=0.05))(encoder_output)

#Fusion
fusion_output = RepeatVector(32 * 32)(embed_input)
fusion_output = Reshape(([32, 32, 1000]))(fusion_output)
fusion_output = concatenate([encoder_output, fusion_output], axis=3)
fusion_output = Conv2D(256, (1, 1), activation='relu', padding='same',
                        bias_initializer=TruncatedNormal(mean=0.0, stddev=0.05))(fusion_output)

#Decoder
decoder_output = Conv2D(128, (3,3), activation='relu', padding='same',
                        bias_initializer=TruncatedNormal(mean=0.0, stddev=0.05))(fusion_output)
decoder_output = UpSampling2D((2, 2))(decoder_output)
decoder_output = Conv2D(64, (3,3), activation='relu', padding='same',
                        bias_initializer=TruncatedNormal(mean=0.0, stddev=0.05))(decoder_output)
decoder_output = UpSampling2D((2, 2))(decoder_output)
decoder_output = Conv2D(32, (3,3), activation='relu', padding='same',
                        bias_initializer=TruncatedNormal(mean=0.0, stddev=0.05))(decoder_output)
decoder_output = Conv2D(16, (3,3), activation='relu', padding='same',
                        bias_initializer=TruncatedNormal(mean=0.0, stddev=0.05))(decoder_output)
decoder_output = Conv2D(2, (3, 3), activation='tanh', padding='same',
                        bias_initializer=TruncatedNormal(mean=0.0, stddev=0.05))(decoder_output)
decoder_output = UpSampling2D((2, 2))(decoder_output)

model = Model(inputs=[encoder_input, embed_input], outputs=decoder_output)
model.compile(optimizer=RMSprop(lr=1e-3), loss='mse', metrics=['accuracy'])

测试图像功能:

我正在以这种方式加载重量。

    test_images = getImages(testing_files)
    model.load_weights('/content/drive/My Drive/weights/orignalcolorize.hdf5')

我是以错误的方式加载权重还是这是其他问题。

标签: pythontensorflowkerasartificial-intelligencekeras-layer

解决方案


推荐阅读