第一部分:
现在遇到的问题:还是因为线下python训练好的模型,不能够直接无缝连接使用。
这个看起来是android中直接调用tensorflow模型,那就不用和c++模块进行对接了 。
说起来惭愧,虽然接触了一段时间的tensorflow,但是好多东西没有需要所以也没有接触到,比如一般使用的多的是tensorflow的模型保存与重载,现在又接触到了对tf的封装(还看了部署到线上的情况)。
所以知道需要看这些的资料,就顺便记录下来,万一使用这个方法了呢?
参考的教程:
http://blog.csdn.net/masa_fish/article/details/56049710
在以前的模型中,需要注意 的几点
1.需要对输入层x,和输出层y,通过形参name进行命名。
###################### 1.对输入层x命名,注意x是以placehoder占位的,而输出层不是这个。
x = tf.placeholder(tf.float32,shape=[None,n_input],name="x_input")
y = tf.placeholder(tf.float32,shape=[None,n_output])
#####################
###################### 2.对输出层命名
pred = tf.add(tf.matmul(dense, w2), b2, name="y_output")
###################### 2.对输出层命名
2.需要将模型保存为.pb格式的文件(就在模型训练完后的位置添加一行代码就可以保存,)
需要导入graph_util包
from tensorflow.python.framework import graph_util
##################模型封装
output_graph_def = graph_util.convert_variables_to_constants(sess, sess.graph_def,
output_node_names=["output"])
# 形参output_node_names用于指定输出的节点名称(不是指的要输出的节点的名称)
pb_file_path = " my_net/save_net.pb"
with tf.gfile.FastGFile(pb_file_path, mode='wb') as f:
f.write(output_graph_def.SerializeToString())
##################模型封装
第二部分:
#################################下面入了个坑,果然是要首先有好教程才行
应该是需要从源码安装tensorflow,才能够移植到android应用,所以教程上 都是说下载源码后,然后再安装 Bazel 。(如果是已经通过pip 安装了tensorflow ,那么再来源码编译 会冲突吗?)
1.从github上下载源码(这个会下载最新的,应该不会因为代码是前面一点的版本,而这个是后面的版本就有问题吧)
sudo apt install git
git clone https://github.com/tensorflow/tensorflow
这个会在当前文件夹下 克隆tensorflow源码到一个新的tensorflow文件夹中。
2.需要下载编译源码的工具
sudo apt-get install python-pip python-dev
先安装Bazel的依赖
sudo add-apt-repository ppa:webupd8team/java
sudo apt-get install openjdk-8-jdk openjdk-8-source
sudo apt-get install pkg-config zip g++ zlib1g-dev unzip
下载安装文件,然后再改变可执行权限
https://github.com/bazelbuild/bazel/releases
chmod +x bazel-0.5.3-installer-linux