如何将keras.模型的一部分提取到另一个模型(tensorflow 2.1.0)中?

如何将keras.模型的一部分提取到另一个模型(tensorflow 2.1.0)中?,tensorflow,keras,tensorflow2.0,keras-layer,Tensorflow,Keras,Tensorflow2.0,Keras Layer,我希望能够将Keras模型的一系列相邻子层提取到一个单独的子模型中。下面是一个简单的例子,它再现了我遇到的错误 import tensorflow as tf from tensorflow.keras import Model from tensorflow.keras.layers import Dense from tensorflow.keras.layers import Layer from tensorflow.keras.layers import Input inp = I

我希望能够将Keras模型的一系列相邻子层提取到一个单独的子模型中。下面是一个简单的例子,它再现了我遇到的错误

import tensorflow as tf
from tensorflow.keras import Model
from tensorflow.keras.layers import Dense
from tensorflow.keras.layers import Layer
from tensorflow.keras.layers import Input 

inp = Input(shape=(128))
d1 = Dense(128, name='d1')(inp)
d2 = Dense(128, name='d2')(d1)
d3 = Dense(128, name='d3')(d2)
out = Dense(128, name='d4')(d3)

model = Model(inp, out)
inp_d2 = model.get_layer('d2').input
sub_model = Model(inp_d2, model.output)
这引起:

ValueError: Graph disconnected: cannot obtain value for tensor Tensor("input_1:0", shape=(None, 128), dtype=float32) at layer "input_1". The following previous layers were accessed without issue: []

有人知道发生此错误的原因或如何修复它吗?

这可以通过声明一个空的顺序子模型并在迭代原始层子集时向其添加层来实现:

#原始型号:
inp=输入(形状=(128))
d1=稠密(128,name='d1')(inp)
d2=稠密(128,name='d2')(d1)
d3=稠密(128,name='d3')(d2)
out=density(128,name='d4')(d3)
模型=模型(输入,输出)
#子模型
sub_model=tf.keras.Sequential()
#我将跳过inp和d1:
对于模型中的图层。图层[2:]:
sub_模型添加(层)
#打印摘要:
示例_输入_形状=(1128)
子模型构建(示例输入形状)
打印(sub_model.summary())

祝你好运

这可以通过声明一个空的顺序子模型并在迭代原始层子集的同时向其添加层来实现:

#原始型号:
inp=输入(形状=(128))
d1=稠密(128,name='d1')(inp)
d2=稠密(128,name='d2')(d1)
d3=稠密(128,name='d3')(d2)
out=density(128,name='d4')(d3)
模型=模型(输入,输出)
#子模型
sub_model=tf.keras.Sequential()
#我将跳过inp和d1:
对于模型中的图层。图层[2:]:
sub_模型添加(层)
#打印摘要:
示例_输入_形状=(1128)
子模型构建(示例输入形状)
打印(sub_model.summary())

祝你好运

如果模型不是连续的呢?如果模型不是连续的呢?