gpt4 book ai didi

Keras模型转成tensorflow的.pb操作

转载 作者:qq735679552 更新时间:2022-09-29 22:32:09 28 4
gpt4 key购买 nike

CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.

这篇CFSDN的博客文章Keras模型转成tensorflow的.pb操作由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.

Keras的.h5模型转成tensorflow的.pb格式模型,方便后期的前端部署。直接上代码 。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
from keras.models import Model
from keras.layers import Dense, Dropout
from keras.applications.mobilenet import MobileNet
from keras.applications.mobilenet import preprocess_input
from keras.preprocessing.image import load_img, img_to_array
import tensorflow as tf
from keras import backend as K
import os
 
base_model = MobileNet(( None , None , 3 ), alpha = 1 , include_top = False , pooling = 'avg' , weights = None )
x = Dropout( 0.75 )(base_model.output)
x = Dense( 10 , activation = 'softmax' )(x)
 
model = Model(base_model. input , x)
model.load_weights( 'mobilenet_weights.h5' )
 
def freeze_session(session, keep_var_names = None , output_names = None , clear_devices = True ):
  from tensorflow.python.framework.graph_util import convert_variables_to_constants
  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 = convert_variables_to_constants(session, input_graph_def,
              output_names, freeze_var_names)
   return frozen_graph
 
output_graph_name = 'NIMA.pb'
output_fld = ''
#K.set_learning_phase(0)
 
print ( 'input is :' , model. input .name)
print ( 'output is:' , model.output.name)
 
sess = K.get_session()
frozen_graph = freeze_session(K.get_session(), output_names = [model.output.op.name])
 
from tensorflow.python.framework import graph_io
graph_io.write_graph(frozen_graph, output_fld, output_graph_name, as_text = False )
print ( 'saved the constant graph (ready for inference) at: ' , os.path.join(output_fld, output_graph_name))

补充知识:keras h5 model 转换为tflite 。

在移动端的模型,若选择tensorflow或者keras最基本的就是生成tflite文件,以本文记录一次转换过程.

环境 。

tensorflow 1.12.0 。

python 3.6.5 。

h5 model saved by `model.save('tf.h5')` 。

直接转换 。

?
1
2
3
`tflite_convert - - output_file = tf.tflite - - keras_model_file = tf.h5`
output
`TypeError: __init__() missing 2 required positional arguments: 'filters' and 'kernel_size' `

先转成pb再转tflite 。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
```
 
git clone git@github.com:amir - abdi / keras_to_tensorflow.git
cd keras_to_tensorflow
python keras_to_tensorflow.py - - input_model = path / to / tf.h5 - - output_model = path / to / tf.pb
tflite_convert \
 
  - - output_file = tf.tflite \
  - - graph_def_file = tf.pb \
  - - input_arrays = convolution2d_1_input \
  - - output_arrays = dense_3 / BiasAdd \
  - - input_shape = 1 , 3 , 448 , 448
```

参数说明,input_arrays和output_arrays是model的起始输入变量名和结束变量名,input_shape是和input_arrays对应 。

官网是说需要用到tenorboard来查看,一个比较trick的方法 。

先执行上面的命令,会报convolution2d_1_input找不到,在堆栈里面有convert_saved_model.py文件,get_tensors_from_tensor_names()这个方法,添加`print(list(tensor_name_to_tensor))` 到 tensor_name_to_tensor 这个变量下面,再执行一遍,会打印出所有tensor的名字,再根据自己的模型很容易就能判断出实际的name.

以上这篇Keras模型转成tensorflow的.pb操作就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持我.

原文链接:https://blog.csdn.net/q6324266/article/details/85262438 。

最后此篇关于Keras模型转成tensorflow的.pb操作的文章就讲到这里了,如果你想了解更多关于Keras模型转成tensorflow的.pb操作的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com