如何将训练有素的 Tensorflow 模型转换为 Keras?

     2023-02-16     220

关键词:

【中文标题】如何将训练有素的 Tensorflow 模型转换为 Keras?【英文标题】:How can I convert a trained Tensorflow model to Keras? 【发布时间】:2017-11-11 23:02:24 【问题描述】:

我有一个训练有素的 Tensorflow 模型和权重向量,它们已分别导出到 protobuf 和权重文件。

如何将这些转换为 Keras 可以使用的 JSON 或 YAML 和 HDF5 文件?

我有 Tensorflow 模型的代码,因此将 tf.Session 转换为 keras 模型并将其保存在代码中也是可以接受的。

【问题讨论】:

【参考方案1】:

我认为keras中的回调也是一种解决方案。

ckpt文件可以通过TF保存:

saver = tf.train.Saver()
saver.save(sess, checkpoint_name)

要在 Keras 中加载检查点,您需要一个回调类,如下所示:

class RestoreCkptCallback(keras.callbacks.Callback):
    def __init__(self, pretrained_file):
        self.pretrained_file = pretrained_file
        self.sess = keras.backend.get_session()
        self.saver = tf.train.Saver()
    def on_train_begin(self, logs=None):
        if self.pretrian_model_path:
            self.saver.restore(self.sess, self.pretrian_model_path)
            print('load weights: OK.')

然后在你的 keras 脚本中:

 model.compile(loss='categorical_crossentropy', optimizer='rmsprop')
 restore_ckpt_callback = RestoreCkptCallback(pretrian_model_path='./XXXX.ckpt') 
 model.fit(x_train, y_train, batch_size=128, epochs=20, callbacks=[restore_ckpt_callback])

这样就好了。 我认为它很容易实现,希望对您有所帮助。

【讨论】:

嗨,MyCallbacks 是什么? 嗨@Austin,MyCallbacks 是RestoreCkptCallback。我已经更正了我的帖子。谢谢你的提醒! 但是,这需要你在 keras 中编写模型,不是吗?【参考方案2】:

keras 的创建者 Francois Chollet 在 04/2017 中表示:“您不能将任意 TensorFlow 检查点转换为 Keras 模型。但是,您可以做的是构建一个等效的 Keras 模型,然后将权重加载到这个 Keras 模型中" ,见https://github.com/keras-team/keras/issues/5273。据我所知,这并没有改变。

一个小例子:

首先,您可以像这样提取张量流检查点的权重

PATH_REL_META = r'checkpoint1.meta'
    
# start tensorflow session
with tf.Session() as sess:
    
    # import graph
    saver = tf.train.import_meta_graph(PATH_REL_META)
    
    # load weights for graph
    saver.restore(sess, PATH_REL_META[:-5])
        
    # get all global variables (including model variables)
    vars_global = tf.global_variables()
    
    # get their name and value and put them into dictionary
    sess.as_default()
    model_vars = 
    for var in vars_global:
        try:
            model_vars[var.name] = var.eval()
        except:
            print("For var=, an exception occurred".format(var.name))

它也可能用于导出 tensorflow 模型以用于 tensorboard,请参阅https://***.com/a/43569991/2135504

其次,您像往常一样构建您的 keras 模型并通过“model.compile”完成它。请注意,您需要按名称定义每个层,然后将其添加到模型中,例如

layer_1 = keras.layers.Conv2D(6, (7,7), activation='relu', input_shape=(48,48,1))
net.add(layer_1)
...
net.compile(...)

第三,您可以使用 tensorflow 值设置权重,例如

layer_1.set_weights([model_vars['conv7x7x1_1/kernel:0'], model_vars['conv7x7x1_1/bias:0']])

【讨论】:

如何处理 batch_norm 层,因为它们有 4 个参数并且似乎会导致问题... @ADA:不是 100% 肯定,但如果你用最小的代码示例提出新问题,我或其他人可以看看。 感谢我发了一个帖子。我很想知道我缺少什么【参考方案3】:

目前,Tensorflow 或 Keras 没有直接内置支持将冻结模型或检查点文件转换为 hdf5 格式。

但既然你提到你有 Tensorflow 模型的代码,你将不得不在 Keras 中重写该模型的代码。然后,您必须从检查点文件中读取变量的值,并使用layer.load_weights(weights) 方法将其分配给 Keras 模型。

除了这种方法之外,我建议您直接在 Keras 中进行培训,因为它声称 Keras' optimizers are 5-10% times faster than Tensorflow's optimizers。另一种方法是使用 tf.contrib.keras 模块在 Tensorflow 中编写代码,然后直接将文件保存为 hdf5 格式。

【讨论】:

【参考方案4】:

不确定这是否是您正在寻找的,但我碰巧对 TF 1.2 中新发布的 keras 支持做了同样的事情。您可以在此处找到有关 API 的更多信息:https://www.tensorflow.org/api_docs/python/tf/contrib/keras

为了节省您一点时间,我还发现我必须包含如下所示的 keras 模块,并将附加的 python.keras 附加到 API 文档中显示的内容中。

从 tensorflow.contrib.keras.python.keras.models 导入顺序

希望能帮助您到达您想去的地方。基本上,一旦集成,您就可以像往常一样处理模型/权重导出。

【讨论】:

如何将 Yolov5 模型转换为 tensorflow.js

】如何将Yolov5模型转换为tensorflow.js【英文标题】:HowtoConvertYolov5modeltotensorflow.js【发布时间】:2021-11-2810:00:56【问题描述】:是否可以将YOLOv5PyTorch模型转换为Tensorflow.js模型?我正在开发一个对象检测网络应用程序。所以我已经... 查看详情

如何在不使用本地PC转换的情况下将我在google colab中训练的tensorflow的protobuf训练模型转换为tensorflowjs?

...何在不使用本地PC转换的情况下将我在googlecolab中训练的tensorflow的protobuf训练模型转换为tensorflowjs?【英文标题】:HowdoIconverttheprotobuftrainmodeloftensorflowItrainingooglecolabtotensorflowjswithouttheuseoflocalPCtoconvert?【发布时间】:2021-12-1317:30:0... 查看详情

如何将tensorflow模型转换为.mlmodel?(代码片段)

我想将具有以下结构的Tensorflow模型转换为.mlmodel文件,以便在iOS应用中使用:cub_image_experiment/logdir/val_summaries/test_summaries/finetune/val_summaries/cmds.txtconfig_train.yamlconfig_test.yaml我正在学习本教程:https://github.com/visipedia/tf_classification/wik... 查看详情

如何将 CoreML 模型转换为 TensorFlow 模型?

】如何将CoreML模型转换为TensorFlow模型?【英文标题】:HowtoconvertaCoreMLModeltoaTensorFlowModel?【发布时间】:2020-08-2523:20:43【问题描述】:我了解到可以将TensorFlow模型(.pb)文件转换为CoreML(.mlmodel)以在iOS平台上运行它。但是我有一些想... 查看详情

Tensorflow:如何将 .meta、.data 和 .index 模型文件转换为一个 graph.pb 文件

】Tensorflow:如何将.meta、.data和.index模型文件转换为一个graph.pb文件【英文标题】:Tensorflow:Howtoconvert.meta,.dataand.indexmodelfilesintoonegraph.pbfile【发布时间】:2018-02-0211:57:39【问题描述】:在tensorflow中,从头开始的训练产生了以下6个... 查看详情

(转)darknet模型与tensorflow模型相互转换

...在C环境下训练的,难免较为晦涩,如果能将模型转换到Tensorflow环境下完成模型的训练,在将训练好的权重转为Darknet可以识别的权重部署到实际应用中。这样就可以将算法的训练和实际部署分开!1、将Darknet框架下的.cfg与.weights... 查看详情

如何创建可轻松转换为 TensorFlow Lite 的模型?

】如何创建可轻松转换为TensorFlowLite的模型?【英文标题】:HowtocreateamodeleasilyconvertibletoTensorFlowLite?【发布时间】:2020-06-2215:47:41【问题描述】:如何创建可以转换为TensorFlowLite(tflite)并可以在Android应用中使用的TensorFlow模型?按... 查看详情

如何在 Google Colab 中使用 TensorFlow 2.0 将 tf.Keras 模型转换为 TPU?

】如何在GoogleColab中使用TensorFlow2.0将tf.Keras模型转换为TPU?【英文标题】:Howtoconverttf.KerasmodeltoTPUusingTensorFlow2.0inGoogleColab?【发布时间】:2019-08-2717:46:41【问题描述】:由于TF2.0没有tf.contrib层,我如何转换我的模型以在TPU上运行... 查看详情

如何将样式转移 tensorflow 模型转换为具有灵活输入形状的 mlmodel?

】如何将样式转移tensorflow模型转换为具有灵活输入形状的mlmodel?【英文标题】:Howtoconvertastyletransfertensorflowmodeltomlmodelwithflexibleinputshape?【发布时间】:2021-09-1011:46:25【问题描述】:我已阅读Coreml指南,该指南展示了如何使用cor... 查看详情

将 Keras 模型转换为 TensorFlow lite - 如何避免不支持的操作?

】将Keras模型转换为TensorFlowlite-如何避免不支持的操作?【英文标题】:ConvertingaKerasmodeltoTensorFlowlite-howtoavoidunsupportedoperations?【发布时间】:2021-12-2113:46:11【问题描述】:我有基于MobileNetV2的模型,它使用TimeDistributed层。我想将... 查看详情

Tensorflow:如何将预训练模型已经嵌入的数据输入到 LSTM 模型中?

】Tensorflow:如何将预训练模型已经嵌入的数据输入到LSTM模型中?【英文标题】:Tensorflow:Howtoinputdataalreadyembeddedbypre-trainmodelintoaLSTMmodel?【发布时间】:2022-01-2003:06:37【问题描述】:我是TensorFlow的新手。我正在构建一个简单的LSTM... 查看详情

tensorflow如何在线训练模型

参考技术A在tensorflow2.0以后可以用keras来创建、训练、评估模型:其中训练模型可以用fit方法来批量训练数据:model.fit(x,y,epochs=1)#x为数据,y为相应标签,epochs为训练次数,默认为1 查看详情

如何创建一个可轻松转换为tensorflowlite的模型?(代码片段)

如何创建一个可以转换为TensorFlowLite(tflite)并能在Android应用中使用的TensorFlow模型?按照GoogleMLCrashCourse中的例子,我已经创建了一个分类器并训练了一个模型。我已经将模型导出为保存模型.我想把模型转换为.tflite文件,并将... 查看详情

如何将 HED 模型转换为 Tensorflow Lite 模型

】如何将HED模型转换为TensorflowLite模型【英文标题】:HowtoconvertaHEDmodeltoTensorflowLitemodel【发布时间】:2019-04-1422:16:48【问题描述】:我正在使用holy-edge创建一个模型。然后,我想将此模型转换为TensorflowLite以供移动使用。我关注st... 查看详情

如何训练 tensorflow deeplab 模型?

】如何训练tensorflowdeeplab模型?【英文标题】:HowcanItraintensorflowdeeplabmodel?【发布时间】:2020-06-0713:08:48【问题描述】:我需要用我的鞋子数据集训练tensorflowdeeplab模型。然后我将使用这个模型来去除图像鞋的背景。我怎么能训练... 查看详情

将 Google 的 SavedModel 转换为 Apple 的 mlmodel

...周Appleannounced支持经过训练的ML模型。如何将经过训练的Tensorflow模型(SavedModel格式的GoogleCloudMachineLearningEngine模型)转换为App 查看详情

将本地训练的 TensorFlow 模型导入 Google Colab

】将本地训练的TensorFlow模型导入GoogleColab【英文标题】:ImportingLocallyTrainedTensorFlowModeltoGoogleColab【发布时间】:2022-01-0813:47:47【问题描述】:我正在GoogleMagenta(MusicVAE)上训练我自己的模型,我正在使用自己的音乐文件并在我的计... 查看详情

将冻结图转换为 tensorflow-js 格式

】将冻结图转换为tensorflow-js格式【英文标题】:Convertfrozengraphtotensorflow-jsformat【发布时间】:2018-09-2217:22:37【问题描述】:我有一个使用Google对象检测API的SSD模型(在自定义数据集上训练)。我冻结了一个生成几个文件(包括... 查看详情