如何水平堆叠Keras模型?

2024-05-06 01:52:16 发布

您现在位置:Python中文网/ 问答频道 /正文

在Keras有可能这样做吗enter image description here

除模型A、B、C外,所有模型是否水平堆放在一个模型中?我见过一些利用输入层的解决方案,但每当我使用输入层时,当我尝试加载模型时,似乎都会出错。 有没有办法加载所有模型,连接它们,并保存为一个新的更大的模型

编辑:我已经培训了所有的模特。我想在事后把它们结合起来


Tags: 模型编辑利用水平解决方案keras办法
2条回答

这是我的想法,让我们假设您要堆叠以下模型:

model_1 = tf.keras.models.Model(inputs = model_1.input, outputs = model_1_out)

model_2 = tf.keras.models.Model(inputs = model_2.input, outputs = model_2_out)

model_3 = tf.keras.models.Model(inputs = model_3.input, outputs = model_3_out)

如果要堆叠模型,而不是连接其输出:

models = [model_3 , model_2 , model_1]
stacked_model_input = tf.keras.Input(shape=(x, x, x))
model_outputs = [model(stacked_model_input) for model in models]
stacked_model = tf.keras.models.Model(inputs=stacked_model_input, outputs=model_outputs)

模型_输出给出:(此处通过3)

[<KerasTensor: shape=(None, 3) dtype=float32 (created by layer 'model_2')>,
 <KerasTensor: shape=(None, 3) dtype=float32 (created by layer 'model_1')>,
 <KerasTensor: shape=(None, 3) dtype=float32 (created by layer 'model')>]

产生: enter image description here

要保存堆叠模型,请执行以下操作:

from tf.keras.models import save_model
save_model(stacked_model , 'model.h5')

我不知道如何使用它们各自的输出,但这就是如何堆叠它们

编辑:您可以通过定义单独的损耗等来使用它们的输出。或者,由于它们是堆叠的,并且输入是共享的,因此您可以获得每个模型的输出,以使用其权重创建新模式。我不知道是否可以从堆叠模型中剪切它们,所以我说获取每个输出

是的,这在keras中是可能的,但它需要一些API的高级知识。特别是,您需要考虑如何计算每个输出相对于输入的损失

我建议检查一下developer guides,也许从functional APIcustom training loops开始

下面是如何使用函数式API创建此类网络的示意图

from tensorflow import keras

input_shape: int = 100
inputs = keras.Input(shape=(input_shape,))

units: int = 64
dense1 = layers.Dense(units)
dense2 = layers.Dense(units)
dense3 = layers.Dense(units)

out1 = dense1(inputs)
out2 = dense2(inputs)
out3 = dense3(inputs)

相关问题 更多 >