2024-05-06 01:52:16 发布
网友
在Keras有可能这样做吗
除模型A、B、C外,所有模型是否水平堆放在一个模型中?我见过一些利用输入层的解决方案,但每当我使用输入层时,当我尝试加载模型时,似乎都会出错。 有没有办法加载所有模型,连接它们,并保存为一个新的更大的模型
编辑:我已经培训了所有的模特。我想在事后把它们结合起来
这是我的想法,让我们假设您要堆叠以下模型:
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')>]
产生:
要保存堆叠模型,请执行以下操作:
from tf.keras.models import save_model save_model(stacked_model , 'model.h5')
我不知道如何使用它们各自的输出,但这就是如何堆叠它们
编辑:您可以通过定义单独的损耗等来使用它们的输出。或者,由于它们是堆叠的,并且输入是共享的,因此您可以获得每个模型的输出,以使用其权重创建新模式。我不知道是否可以从堆叠模型中剪切它们,所以我说获取每个输出
是的,这在keras中是可能的,但它需要一些API的高级知识。特别是,您需要考虑如何计算每个输出相对于输入的损失
keras
我建议检查一下developer guides,也许从functional API和custom 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)
这是我的想法,让我们假设您要堆叠以下模型:
如果要堆叠模型,而不是连接其输出:
模型_输出给出:(此处通过3)
产生:
要保存堆叠模型,请执行以下操作:
我不知道如何使用它们各自的输出,但这就是如何堆叠它们
编辑:您可以通过定义单独的损耗等来使用它们的输出。或者,由于它们是堆叠的,并且输入是共享的,因此您可以获得每个模型的输出,以使用其权重创建新模式。我不知道是否可以从堆叠模型中剪切它们,所以我说获取每个输出
是的,这在
keras
中是可能的,但它需要一些API的高级知识。特别是,您需要考虑如何计算每个输出相对于输入的损失我建议检查一下developer guides,也许从functional API和custom training loops开始
下面是如何使用函数式API创建此类网络的示意图
相关问题 更多 >
编程相关推荐