Python 在Tensorflow图中使用预先训练的Keras模型

Python 在Tensorflow图中使用预先训练的Keras模型,python,tensorflow,machine-learning,keras,deep-learning,Python,Tensorflow,Machine Learning,Keras,Deep Learning,我有一个预先训练的Keras模型,它接受任意维度的输入并输出单个分类结果。我不需要进一步训练模型,所以我很乐意将所有可训练变量转换为常量。但是,我确实需要在Tensorflow图中使用该模型,以训练另一个模型 本质上,我希望预先训练好的Keras模型可以作为输入输出操作,而不应用任何梯度。我在h5文件中预先保存了Keras模型权重,可以毫无问题地加载这些权重,然后使用它们初始化模型中的层 我目前正在做的工作如下: class myKerasModel(Model): def __init

我有一个预先训练的Keras模型,它接受任意维度的输入并输出单个分类结果。我不需要进一步训练模型,所以我很乐意将所有可训练变量转换为常量。但是,我确实需要在Tensorflow图中使用该模型,以训练另一个模型

本质上,我希望预先训练好的Keras模型可以作为输入输出操作,而不应用任何梯度。我在h5文件中预先保存了Keras模型权重,可以毫无问题地加载这些权重,然后使用它们初始化模型中的层

我目前正在做的工作如下:

class myKerasModel(Model):
    def __init__(self, shape, trainable=True):
        self.layers = [
               Dense(100, activation='relu', kernel_initializer='random_uniform', bias_initializer='zeros', trainable=trainable)
            ]
        inputs = Input(shape)
        Model.__init__(self, inputs=inputs, outputs=outputs)

    def apply_model_to_tensor(self, tensor):
        model = Sequential()
        model.add(InputLayer(input_tensor=tensor))
        for layer in self.layers:
            model.add(layer)
        model.trainable = False
        return model
训练模型并将权重保存在
weights.h5
中后,我加载模型权重,然后尝试在Tensorflow会话中将加载权重的模型应用于张量:

test_input_tensor = ... # Some Tensorflow tensor of a specified shape (a variable)
mod = myKerasModel(shape, trainable=False)
mod.load_weights('weights.h5')
model = mod.apply_model_to_tensor(test_input_tensor)
# Now use model.output
问题是,我不认为
model
的权重与
mod
的权重相同,即使层是实例变量,因此它们本质上是相同的对象。我对此感到困惑。此外,在张力板中检查时,
模型
连接到
梯度
,即使我已将trainable设置为False。我认为这可能只是因为Keras创建模型的方式,但如果我错了,请纠正我


有没有办法将
模型
加载到具有正确权重的Tensorflow图中,并将其连接到任意输入tensor?

能否显示完整的代码?关于层标志与模型的一些内容-完整的代码比这要长一点,所以很难全部显示出来,我只是将相关的部分删减,作为概念证明,但是如果您有任何不确定的地方,请让我知道,以便我可以将其添加到代码中。