最近很多小伙伴都在问如何将Keras.h5导出到tensorflow.pb?和kerash5转pb这两个问题,那么本篇文章就来给大家详细解答一下,同时本文还将给你拓展android–将权重添加到Ten
最近很多小伙伴都在问如何将Keras .h5导出到tensorflow .pb?和keras h5转pb这两个问题,那么本篇文章就来给大家详细解答一下,同时本文还将给你拓展android – 将权重添加到TensorFlow导出的.pb文件中、c – 将Keras模型转换为TensorFlow protobuf、keras和tensorflow保存为可部署的pb格式、python,keras,tensorflow 安装问题 module ''tensorflow'' has no attribute ''get_default_graph''等相关知识,下面开始了哦!
本文目录一览:- 如何将Keras .h5导出到tensorflow .pb?(keras h5转pb)
- android – 将权重添加到TensorFlow导出的.pb文件中
- c – 将Keras模型转换为TensorFlow protobuf
- keras和tensorflow保存为可部署的pb格式
- python,keras,tensorflow 安装问题 module ''tensorflow'' has no attribute ''get_default_graph''
如何将Keras .h5导出到tensorflow .pb?(keras h5转pb)
我已经使用新数据集微调了初始模型,并将其保存为Keras中的“ .h5”模型。现在我的目标是在仅接受“ .pb”扩展名的android
Tensorflow上运行我的模型。问题是Keras或tensorflow中是否有任何库可以进行此转换?到目前为止,我已经看过这篇文章:https :
//blog.keras.io/keras-as-a-simplified-interface-to-tensorflow-
tutorial.html,但还不清楚。
答案1
小编典典Keras本身不包括将TensorFlow图导出为协议缓冲区文件的任何方法,但是您可以使用常规TensorFlow实用程序来实现。这是一篇博客文章,解释了如何使用freeze_graph.py
TensorFlow中包含的实用程序脚本执行此操作,这是完成操作的“典型”方式。
但是,我个人觉得必须创建一个检查点,然后运行一个外部脚本来获取模型,但我更喜欢从我自己的Python代码中执行此操作,因此我使用了这样的函数:
def freeze_session(session, keep_var_names=None, output_names=None, clear_devices=True): """ Freezes the state of a session into a pruned computation graph. Creates a new computation graph where variable nodes are replaced by constants taking their current value in the session. The new graph will be pruned so subgraphs that are not necessary to compute the requested outputs are removed. @param session The TensorFlow session to be frozen. @param keep_var_names A list of variable names that should not be frozen, or None to freeze all the variables in the graph. @param output_names Names of the relevant graph outputs. @param clear_devices Remove the device directives from the graph for better portability. @return The frozen graph definition. """ graph = session.graph with graph.as_default(): freeze_var_names = list(set(v.op.name for v in tf.global_variables()).difference(keep_var_names or [])) output_names = output_names or [] output_names += [v.op.name for v in tf.global_variables()] input_graph_def = graph.as_graph_def() if clear_devices: for node in input_graph_def.node: node.device = "" frozen_graph = tf.graph_util.convert_variables_to_constants( session, input_graph_def, output_names, freeze_var_names) return frozen_graph
这是实施的启发freeze_graph.py
。参数也类似于脚本。session
是TensorFlow会话对象。keep_var_names
仅在您希望不冻结某些变量时才需要(例如,对于有状态模型),通常不需要。output_names
是包含产生所需输出的操作名称的列表。clear_devices
只需删除任何设备指令即可使图形更具可移植性。因此,对于model
具有一个输出的典型Keras
,您将执行以下操作:
from keras import backend as K# Create, compile and train model...frozen_graph = freeze_session(K.get_session(), output_names=[out.op.name for out in model.outputs])
然后,您可以像往常一样使用tf.train.write_graph
以下命令将图形写入文件:
tf.train.write_graph(frozen_graph, "some_directory", "my_model.pb", as_text=False)
android – 将权重添加到TensorFlow导出的.pb文件中
tf.train.write_graph(sess.graph_def,"./","inp.txt",True) saver.save(sess,'variables/model.ckpt',global_step=1)
现在,尽管使用这两个文件将其导入到Python中是不错的,但似乎不可能将其用于Android或C,因为它不能导入检查点.ckpt.
现在,我使用google提供的脚本freeze_graph.py将这两个文件加入到一个文件中:
bazel-bin/tensorflow/python/tools/freeze_graph --input_graph=inp.txt --input_checkpoint=variables/model.ckpt-1 --output_graph=newoutput.pb --output_node_names=output
我的问题是,有没有办法使用另一个函数而不是tf.train.write_graph来导出它包含的权重?
解决方法
如前所述,在Github(have a look)上,TensorFlow团队目前没有解决这个问题.
现在不能说什么
pltrdy
c – 将Keras模型转换为TensorFlow protobuf
不幸的是生产环境是C,所以我们的计划是:
>使用TensorFlow后端将模型保存到protobuf
>将我们的生产代码链接到TensorFlow,然后加载到protobuf
不幸的是,我不知道如何访问Keras的TensorFlow保存实用程序,通常保存到HDF5和JSON.如何保存到protobuf?
解决方法
http://blog.keras.io/keras-as-a-simplified-interface-to-tensorflow-tutorial.html
检查这部分:
II: Using Keras models with TensorFlow
Converting a Keras Sequential model for use in a TensorFlow workflow
keras和tensorflow保存为可部署的pb格式
github博客传送门 csdn博客传送门
Keras保存为可部署的pb格式
加载已训练好的.h5格式的keras模型
传入如下定义好的export_savedmodel()方法内即可成功保存
import keras
import os
import tensorflow as tf
from tensorflow.python.util import compat
from keras import backend as K
def export_savedmodel(model):
''''''
传入keras model会自动保存为pb格式
''''''
model_path = "model/" # 模型保存的路径
model_version = 0 # 模型保存的版本
# 从网络的输入输出创建预测的签名
model_signature = tf.saved_model.signature_def_utils.predict_signature_def(
inputs={''input'': model.input}, outputs={''output'': model.output})
# 使用utf-8编码将 字节或Unicode 转换为字节
export_path = os.path.join(compat.as_bytes(model_path), compat.as_bytes(str(model_version))) # 将保存路径和版本号join
builder = tf.saved_model.builder.SavedModelBuilder(export_path) # 生成"savedmodel"协议缓冲区并保存变量和模型
builder.add_meta_graph_and_variables( # 将当前元图添加到savedmodel并保存变量
sess=K.get_session(), # 返回一个 session 默认返回tf的sess,否则返回keras的sess,两者都没有将创建一个全新的sess返回
tags=[tf.saved_model.tag_constants.SERVING], # 导出模型tag为SERVING(其他可选TRAINING,EVAL,GPU,TPU)
clear_devices=True, # 清除设备信息
signature_def_map={ # 签名定义映射
tf.saved_model.signature_constants.DEFAULT_SERVING_SIGNATURE_DEF_KEY: # 默认服务签名定义密钥
model_signature # 网络的输入输出策创建预测的签名
})
builder.save() # 将"savedmodel"协议缓冲区写入磁盘.
print("save model pb success ...")
model = keras.models.load_model(''model_data/weight.h5'') # 加载已训练好的.h5格式的keras模型
export_savedmodel(model) # 将模型传入保存模型的方法内,模型保存成功.
Tensorflow保存为可部署的pb格式
- 在tensorflow绘图的情况下,使用tf.saved_model.simple_save()方法保存模型
- 传入session
- 传入保存路径
- 传入输入占位符在inputs={"input_name": 网络输入占位符变量}
- 传入输出变量在outputs={"output_name1": 网络输出变量, "output_name2": 网络输出变量}
即可成功保存为可部署的pb格式
tf.saved_model.simple_save(sess,
"./model",
inputs={"myInput": x}, # input_name可自定义,编码客户端时对应即可
outputs={"myOutput": y})
保存好模型后会得到这样格式文件证明你保存没有问题了
variables/
variables.data-*****-of-*****
variables.index
saved_model.pb
print_r(''点个赞吧'');
var_dump(''点个赞吧'');
NSLog(@"点个赞吧!")
System.out.println("点个赞吧!");
console.log("点个赞吧!");
print("点个赞吧!");
printf("点个赞吧!\n");
cout << "点个赞吧!" << endl;
Console.WriteLine("点个赞吧!");
fmt.Println("点个赞吧!")
Response.Write("点个赞吧");
alert(’点个赞吧’)
python,keras,tensorflow 安装问题 module ''tensorflow'' has no attribute ''get_default_graph''
module ‘tensorflow’ has no attribute ‘get_default_graph’
当我使用 keras 和 tensorflow 做深度学习的时候,python3.7 报了这个错误,这个问题源自于 keras 和 TensorFlow 的版本过高导致模块不存在或者已经更改不再兼容
解决办法,降级。改为 python3.6.5,TensorFlow1.12.0 和 keras 2.2.4
对应关系如下
python,tensorflow 和 keras 的版本对应关系。
https://docs.floydhub.com/guides/environments/
————————————————
版权声明:本文为 CSDN 博主「devilyouwei」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/u014466109/article/details/88877321
Anaconda 安装、查看、卸载第三方库
https://blog.csdn.net/qq_35711921/article/details/80495662
Anaconda 详细安装及使用教程(带图文) - 代码帮 - CSDN 博客
https://blog.csdn.net/ITLearnHall/article/details/81708148
Anaconda 版本选择 & Python3.6 版本的 Anaconda 下载
https://blog.csdn.net/Zhou_Dao/article/details/87833957
pip install 安装特别慢
以 tensorflow 为例:
pip install tensorflow -i https://pypi.tuna.tsinghua.edu.cn/simple/
我们今天的关于如何将Keras .h5导出到tensorflow .pb?和keras h5转pb的分享已经告一段落,感谢您的关注,如果您想了解更多关于android – 将权重添加到TensorFlow导出的.pb文件中、c – 将Keras模型转换为TensorFlow protobuf、keras和tensorflow保存为可部署的pb格式、python,keras,tensorflow 安装问题 module ''tensorflow'' has no attribute ''get_default_graph''的相关信息,请在本站查询。
本文标签: