我正在尝试从我的Keras(tensorflow后端)模型创建一个pb文件,以便我可以在iOS上构建它.我正在使用freeze.py,我需要传递输出节点.如何获取Keras模型的输出节点名称?
https://github.com/tensorflow/tensorflow/blob/master/tensorflow/python/tools/freeze_graph.py
附注。请不要指出我将 Keras 模型直接转换为 tflite,因为我的 .h5 文件将无法直接转换为 .tflite。我以某种方式设法将我的 .h5 文件转换为 .pb
我已经按照这个Jupyter notebook 使用 Keras 进行了人脸识别。然后我将我的模型保存到一个model.h5文件中,然后model.pb使用这个.
现在我想在 Android 中使用我的 tensorflow 文件。为此,我需要使用 Tensorflow Lite,这需要我将模型转换为某种.tflite格式。
为此,我试图在此处遵循官方指南。正如你在那里看到的,它需要input_array和output_array数组。如何从我的model.pb文件中获取这些内容的详细信息?
我已经训练基于这个模型Keras 回购。
训练后,我将模型另存为检查点文件,如下所示:
sess=tf.keras.backend.get_session()
saver = tf.train.Saver()
saver.save(sess, current_run_path + '/checkpoint_files/model_{}.ckpt'.format(date))
Run Code Online (Sandbox Code Playgroud)
然后,我从检查点文件中还原图形,并使用标准tf Frozen_graph脚本将其冻结。当我想恢复冻结的图时,出现以下错误:
Input 0 of node Conv_BN_1/cond/ReadVariableOp/Switch was passed float from Conv_BN_1/gamma:0 incompatible with expected resource
如何解决此问题?
编辑:我的问题与此问题有关。不幸的是,我无法使用替代方法。
编辑2:我在github上打开了一个问题,并创建了要点来重现该错误。 https://github.com/keras-team/keras/issues/11032
我必须使用带有 OpenCV 框架的 Tensorflow 2.X 模型(带有 C++ 的 v.4.X)。
为此,我需要一个.pb文件或一个.pb和一个.pbtxt文件,而不是像我拥有的那样的 Tensorflow 保存模型。
所以我的问题是:有没有办法将保存的模型转换为 OpenCV 可以读取的格式?比如,也许,一个caffe模型?
我尝试使用MMdnn但它给了我一个奇怪的错误:
Traceback (most recent call last):
File "/usr/local/bin/mmconvert", line 8, in <module>
sys.exit(_main())
File "/usr/local/lib/python3.5/dist-packages/mmdnn/conversion/_script/convert.py", line 102, in _main
ret = convertToIR._convert(ir_args)
File "/usr/local/lib/python3.5/dist-packages/mmdnn/conversion/_script/convertToIR.py", line 62, in _convert
from mmdnn.conversion.tensorflow.tensorflow_parser import TensorflowParser
File "/usr/local/lib/python3.5/dist-packages/mmdnn/conversion/tensorflow/tensorflow_parser.py", line 15, in <module>
from tensorflow.tools.graph_transforms import TransformGraph
ImportError: No module named 'tensorflow.tools.graph_transforms'
Run Code Online (Sandbox Code Playgroud)
我想这是因为它是用 Tensorflow 1.X 开发和测试的。
编辑:我也有相对的 Keras 模型(现在它与 Tensorflow …
我有一个经过微调的 vgg 模型,我使用tensorflow.keras功能 API 创建了该模型,并使用tf.contrib.saved_model.save_keras_model保存了模型。因此模型以以下结构保存:assets文件夹,其中包含saved_model.json文件,saved_model.pb文件,以及variables文件夹,其中包含checkpoint,variables.data-00000-of-00001和variables.index。
我可以轻松地在 python 中加载模型并使用tf.contrib.saved_model.load_keras_model(saved_model_path)获得预测,但我不知道如何在 JAVA 中加载模型。我用谷歌搜索了很多,发现了这个 How to export Keras .h5 to tensorflow .pb? 导出为 pb 文件,然后按照此链接Loading in Java加载它。我无法冻结图表,而且我尝试使用 simple_save 但 tensorflow.keras 不支持 simple_save (AttributeError: module 'tensorflow.contrib.saved_model' has no attribute 'simple_save')。那么有人可以帮助我弄清楚在 JAVA 中加载我的模型(tensorflow.keras 功能 API 模型)需要哪些步骤。
我拥有的saved_model.pb 文件是否足够好,可以在JAVA 端加载?我需要创建输入/输出占位符吗?那我该如何导出呢?
我感谢您的帮助。
我想将模型及其各自训练的权重从 tensorflow.js 转换为标准 tensorflow,但无法弄清楚如何做到这一点,tensorflow.js 的文档对此没有任何说明
我有一个 manifest.json 和许多其他文件,对应于每一层的权重和偏差,我想得到一个 .bytes 文件,用于标准版本的 tensorflow
我检查了其他问题的答案,这些问题可能与如何从 tensorflow.js 下载模型和权重 (我问那个问题)有轻微的相关性 ,这只是部分回答,没有给出关于这个问题的任何提示的答案
我试图按照本教程讲解如何转换Keras H5模型zu ProtoBuff并使用Tensorflow服务为其提供服务:https ://towardsdatascience.com/deploying-keras-models-using-tensorflow-serving-and-flask-508ba00f1037
该教程在网络上的许多其他资源中都使用了“ tf.saved_model.simple_save”,该名称现已弃用并删除(2019年3月)。如以下所示,使用freeze_session将h5转换为pb: 如何将Keras .h5导出到tensorflow .pb?
似乎错过了一个“ serv”标签,因为tensorflow_model_server输出:
Loading servable: {name: ImageClassifier version: 1} failed: Not found: Could not find meta graph def matching supplied tags: { serve }. To inspect available tag-sets in the SavedModel, please use the SavedModel CLI: saved_model_cli
使用save_model_cli进行了检查,没有标签。
现在如何使h5模型可在tensorflow_server中使用?
我有一个使用 Tensorflow 2 和 Keras 定义的大模型。该模型在 Python 中运行良好。现在,我想将它导入到 C++ 项目中。
在我的 C++ 项目中,我使用TF_GraphImportGraphDef函数。*.pb如果我使用以下代码准备文件,效果很好:
with open('load_model.pb', 'wb') as f:
f.write(tf.compat.v1.get_default_graph().as_graph_def().SerializeToString())
Run Code Online (Sandbox Code Playgroud)
我已经在使用 Tensorflow 1 (使用 tf.compat.v1.* 函数)编写的简单网络上尝试了此代码。效果很好。
现在我想将我的大模型(开头提到的,使用 Tensorflow 2 编写的)导出到 C++ 项目中。为此,我需要从模型中获取一个Graphor对象。GraphDef问题是:如何做到这一点?我没有找到任何属性或函数来获取它。
我还尝试使用来tf.saved_model.save(model, 'model')保存整个模型。它生成一个包含不同文件的目录,包括saved_model.pbfile. 不幸的是,当我尝试使用TF_GraphImportGraphDef函数在 C++ 中加载此文件时,程序抛出异常。
我找到以下代码片段来可视化已保存到*.pb文件中的模型:
model_filename ='saved_model.pb'
with tf.Session() as sess:
with gfile.FastGFile(path_to_model_pb, 'rb') as f:
data = compat.as_bytes(f.read())
sm = saved_model_pb2.SavedModel()
sm.ParseFromString(data)
g_in = tf.import_graph_def(sm.meta_graphs[0].graph_def)
LOGDIR='.'
train_writer = tf.summary.FileWriter(LOGDIR)
train_writer.add_graph(sess.graph)
Run Code Online (Sandbox Code Playgroud)
现在,我正在努力创建saved_model.pb。如果我的session.run看起来像这样:
_, cr_loss = sess.run([train_op,cross_entropy_loss],
feed_dict={input_image: images,
correct_label: gt_images,
keep_prob: KEEP_PROB,
learning_rate: LEARNING_RATE}
)
Run Code Online (Sandbox Code Playgroud)
我如何保存图形所含train_op到saved_model.pb?