首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >基于预训练的图像多分类集成学习模型

基于预训练的图像多分类集成学习模型
EN

Stack Overflow用户
提问于 2020-12-27 20:35:48
回答 1查看 236关注 0票数 2

我正在尝试为医学图像分类任务创建一个包含三个预先训练好的VGG16、InceptionV3和EfficientNetB0的集成。以下是我基于Keras和Tensorflow后端的代码:

代码语言:javascript
复制
def load_all_models():
    all_models = []
    model_names = ['model1.h5', 'model2.h5', 'model3.h5']
    for model_name in model_names:
        filename = os.path.join('models', model_name)
        model = tf.keras.models.load_model(filename)
        all_models.append(model)
        print('loaded:', filename)
    return all_models


models = load_all_models()
for i, model in enumerate(models):
    for layer in model.layers:
        layer.trainable = False

print("[INFO] evaluation network ...")
model.evaluate(X_test, verbose=1)
predIdxs = model.predict(X_test, verbose=1)

predprobabilities = model.predict(X_test, verbose=1)
predIdxs = np.argmax(predprobabilities, axis=1)

print(classification_report(y_test.argmax(axis=1), predIdxs, target_names=lb.classes_))

前面的代码提供了以下输出:

然后,我将三个网络的输出连接到一个Dense层,如以下代码所示:

代码语言:javascript
复制
ensemble_visible = [model.input for model in models]
ensemble_outputs = [model.output for model in models]
merge = tf.keras.layers.concatenate(ensemble_outputs)
merge = tf.keras.layers.Dense(10, activation='relu')(merge)
output = tf.keras.layers.Dense(3, activation='sigmoid')(merge)
model = tf.keras.models.Model(inputs=ensemble_visible, outputs=output)

但是当我执行代码时,我得到了这个错误:

感谢您的帮助或建议,谢谢!

EN

回答 1

Stack Overflow用户

发布于 2020-12-27 22:26:15

我们加载了三个模型,错误显示Flatten层的名称重复了三次。我们只需要改变名字,

代码语言:javascript
复制
models = load_all_models()
for i, model in enumerate(models):
   for layer in model.layers:
       if layer.name == "Flatten":
          layer.name = "Flatten_{}".format( i )
       layer.trainable = False

因此,我们将为Flatten_0Flatten_1Flatten_2这三个Flatten层提供唯一的名称。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65465801

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档