Keras 如何将一个模型拆分为两个独立的模型?

Keras 如何将一个模型拆分为两个独立的模型?,keras,Keras,例如,我有一个具有3个中间层的模型: Model1:Input1-->L1-->L2-->L3 想把它分成几部分 Model2:Input2-->L1-->L2 和Model3:Input3-->L3 使用函数式API很容易将这两个函数堆叠起来,以获得第一个函数。但我不知道如何做相反的事情 第一个拆分模型可以通过以下方式获得:model(Input1,L2.output),但第二个不是那么容易。最简单的方法是什么 示例代码: # the first model input1 = Input(sh

例如,我有一个具有3个中间层的模型:

Model1:Input1-->L1-->L2-->L3

想把它分成几部分

Model2:Input2-->L1-->L2

Model3:Input3-->L3

使用函数式API很容易将这两个函数堆叠起来,以获得第一个函数。但我不知道如何做相反的事情

第一个拆分模型可以通过以下方式获得:
model(Input1,L2.output)
,但第二个不是那么容易。最简单的方法是什么

示例代码:

# the first model
input1 = Input(shape=(784,))
l1 = Dense(64, activation='relu')(inputs)
l2 = Dense(64, activation='relu')(l1)
l3 = Dense(10, activation='softmax')(l2)
model1 = Model(inputs, l3)
我想构建上面描述的
model2
model3
,它们与
model1
共享权重,而model1已经存在(可能从磁盘加载)


谢谢

简而言之,需要额外的
输入。因为输入张量不同于中间张量

首先定义共享层:

l1=密集型(64,激活='relu')
l2=密集型(64,激活='relu')
l3=密集型(10,activation='softmax')

记住

input1=Input(shape=(784,)#input1是一个输入张量
o1=l1(input1)#o1是一个中间张量

Model1
可以定义为
Model1=Model(input1,l3(l2(l1(input1)))


要定义
model2
,必须首先定义一个新的输入张量
input2=input(shape=(64,)
。然后
model2=Model(input2,l3(l2(input2))

来澄清模型(Input3,l3)不起作用?为什么?你能写一些代码作为你试图实现的例子吗?@putonspectacles谢谢你的回复。Model(Input3,l3)这是不可能的,因为Input3不存在,而L3的输入是L2的输出。我认为这里的关键是如何正确重置L3的输入。我更新了一些示例代码。非常感谢。这对我来说很有效。但还有一个问题,它能更简单吗?因为此方法需要重建model2的整个计算图,它已经包含在模型1中定义。当模型1是一个加载的预训练模型且非常复杂时,提取所有中间层并重建模型2可能会很困难。理想的情况是只在模型1中指定两点,然后以某种方式“提取”中间部分作为子模型。有可能使用keras吗?据我所知,您不能这样做。因为keras依赖于TF或THANO,这些框架以不同的方式对待输入张量和中间张量。