有没有办法集成两个针对相同类别训练的 keras (h5) 模型

Sur*_*iya 7 python machine-learning ensemble-learning keras image-classification

我已经用不同的数据集为相同的类标签训练了两个 keras 模型。我如何将模型 keras_model.h5 和 keras_model2.h5 集成在一起,并制作另一个 keras 模型,即 keras_ensemble.h5。我尝试参考各种互联网资源,但运气不佳。有人可以帮我编写集成它的代码吗? 这是我训练过的模型

请帮助我解决这个问题。谢谢。

编辑:这是我的代码,在回答我的问题 Frightera 的人的帮助下我能够完成该代码

 import tensorflow.keras
    import tensorflow as tf
    from PIL import Image, ImageOps
    import numpy as np
    
    # Disable scientific notation for clarity
    np.set_printoptions(suppress=True)
    
    # Load the model
    keras_model = tensorflow.keras.models.load_model('keras_model.h5', compile=False)
    keras_model._name = 'model1'
    keras_model2 = tensorflow.keras.models.load_model('keras_model2.h5', compile=False)
    keras_model2._name = 'model2'
    models = [keras_model, keras_model2]
    #model_input = tf.keras.Input(shape=(125, 125, 3))
    model_input = tf.keras.Input(shape=(224, 224, 3))
    model_outputs = [model(model_input) for model in models]
    ensemble_output = tf.keras.layers.Average()(model_outputs)
    ensemble_model = tf.keras.Model(inputs=model_input, outputs=ensemble_output)
Run Code Online (Sandbox Code Playgroud)

编辑 我如何获得 h5 格式的 keras 集成模型?

Fri*_*era 20

你可以像这样对它们进行平均集成:

models = [keras_model, keras_model2]
model_input = tf.keras.Input(shape=(125, 125, 3))
model_outputs = [model(model_input) for model in models]
ensemble_output = tf.keras.layers.Average()(model_outputs)
ensemble_model = tf.keras.Model(inputs=model_input, outputs=ensemble_output)
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述


编辑:如果您想创建加权整体,您可以创建一个自定义图层,如下所示:

class WeightedAverageLayer(tf.keras.layers.Layer):
    def __init__(self, w1, w2, **kwargs):
        super(WeightedAverageLayer, self).__init__(**kwargs)
        self.w1 = w1
        self.w2 = w2

    def call(self, inputs):
        return self.w1 * inputs[0] + self.w2 * inputs[1]
Run Code Online (Sandbox Code Playgroud)

所以输出层应该是这样的:

ensemble_output = WeightedAverageLayer(0.6, 0.4)(model_outputs)
Run Code Online (Sandbox Code Playgroud)

此处,第一个模型的输出按 因子缩放0.6。同样的情况也适用于第二个模型,因子为0.4

注意:WeightedAverageLayer(0.5, 0.5)将与 相同tf.keras.layers.Average()