window 下 Android studio 上运行tensorflow

1、在build.gradle

//加入这一行代码就可以,编译之后我们的Android项目就可以使用tensorflow接口
//不需要Bazle之类的工具,进行一系列的操作
compile 'org.tensorflow:tensorflow-android:+'

2、首先写一个简单的python代码

"""
开发时间:2018.6.17
模型作用:简单的矩阵想加
目的:测试Android中tensorflow是否可用
"""
import tensorflow as tf

# 1.注意这里面的 name 很重要,我们给这个tensorflow模型喂值就靠 name !!!
first = tf.constant([1,2],dtype=tf.float32,name="input")

# 就是测试简单的矩阵想加
result = tf.add(first,first,name="output")

# 2.开启一个Session
sess = tf.Session()
sess.run(tf.initialize_all_variables())

# 3.这几行代码就是把当前的模型保存为PB文件,PB文件会保存当前tensorflow的模型,将其他值固化为常量

# 第一个参数 sess指定为当前的Session,第二个参数是要保存的 图的定义,默认是当前图,然后是要输出的节点
output_graph_def = tf.graph_util.convert_variables_to_constants(sess, sess.graph_def,
                                                                        output_node_names=['output'])
# 这里是选择要保存的位置
with tf.gfile.FastGFile('F:/android_tensorflow.pb', mode='wb') as f:
        f.write(output_graph_def.SerializeToString())

# 运行以上代码就会在 你选择的对应的目录找打PB文件
3、将生成的PB文件放在Androidstudio相应目录下

window 下 Android studio 上运行tensorflow

4、在Android中调用feed 并且运行

 @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        //保存要输入和输出的结果
        float[] inputs = new float[]{7,8}; //随机给定值看是否达到想加的效果
        float[] outputs = new float[2];

        // 这里是那个PB文件的绝对路径
        String filename = "android_tensorflow.pb";

        // 以那个PB文件创建一个tensorflow的接口
        TensorFlowInferenceInterface tensorFlowInferenceInterface =
                new TensorFlowInferenceInterface(getAssets(),filename);

        //1.feed 参数, 第一个参数是 张量的名称 ,第二个是一个一维数组存放数据, 最后指定矩阵的维度,我这里是1行2列
        tensorFlowInferenceInterface.feed("input",inputs,1,2);

        //2.运行要输出的张量
        tensorFlowInferenceInterface.run(new String[]{"output"});

        //3.然后将结果获取到,保存在数组中,方便我们获取
        tensorFlowInferenceInterface.fetch("output",outputs);


        //然后你可以控制台打印出来,或者用textView等在Android界面显示出来,看有没有达到我们的效果,有没有显示两个矩阵的想加
        Toast.makeText(this, String.valueOf(outputs[0])+":"+String.valueOf(outputs[1]),
                Toast.LENGTH_LONG).show();

    }
当我们把这个app下载到手机上就可以看到结果14.0 : 16.0 
我们的Android项目中已经可以成功使用tensorflow的接口运行tensorflow模型

本文转载自:window 下 Android studio 上运行tensorflow - private_void_main的博客 - ****博客  https://blog.****.net/private_void_main/article/details/80717565