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

Is there a way to ensemble two keras (h5) models trained for same classes

我已经为相同的 class 标签训练了两个具有不同数据集的 keras 模型。我如何将模型 keras_model.h5 和 keras_model2.h5 组合在一起并使另一个 keras 模型说 keras_ensemble.h5。我试过参考各种互联网资源,但没有运气。 有人可以帮我编写代码吗? Here are the models I've trained

请通过this.Thank你帮助我。

编辑: 这是我的代码,我在回答我的问题的人的帮助下完成了 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)

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

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

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)


编辑:如果你想创建加权合奏,你可以像这样创建一个自定义层:

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]

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

ensemble_output = WeightedAverageLayer(0.6, 0.4)(model_outputs)

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

注意:WeightedAverageLayer(0.5, 0.5) 等同于 tf.keras.layers.Average()

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('APPLE/apple_model1.h5', compile=False)
keras_model._name = 'model1'
keras_model2 = tensorflow.keras.models.load_model('APPLE/apple_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)  

ensemble_model.save('APPLE/ensemble_apple.h5')