首页 > 解决方案 > 无法将 chexnet 预训练的权重文件加载到 Densenet121

问题描述

我正在尝试将 Keras chexNet 权重文件加载到 Densenet121, https: //www.kaggle.com/theewok/chexnet-keras-weights

我收到 ValueError:您正在尝试将包含 242 层的权重文件加载到具有 241 层的模型中。如果我打电话给densenet121

densenet = tf.keras.applications.DenseNet121(
include_top=False,
weights="CheXNet_Keras_0.3.0_weights.h5",
input_shape=(224,224,3)
)

如果我尝试:-

densenet = tf.keras.applications.DenseNet121(
include_top=True,
weights="CheXNet_Keras_0.3.0_weights.h5",
input_shape=(224,224,3)
)

我会得到 ValueError: Shapes (1024, 1000) 和 (1024, 14) 不兼容

标签: tensorflowkeraspre-trained-modeldensenet

解决方案


他们在没有正确输出层的情况下保存了模型,修复方法如下:

base_model = densenet.DenseNet121(weights=None,
                            include_top=False,
                            input_shape=(224,224,3), pooling="avg")

predictions = tf.keras.layers.Dense(14, activation='sigmoid', name='predictions')(base_model.output)
base_model = tf.keras.Model(inputs=base_model.input, outputs=predictions)
base_model.load_weights("./temp/CheXNet_Keras_0.3.0_weights.h5")
base_model.layers.pop()

print("CheXNet loaded")

推荐阅读