Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/352.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android应用程序中从二进制文件加载Tensorflow图_Android_Python_C++_Tensorflow - Fatal编程技术网

Android应用程序中从二进制文件加载Tensorflow图

Android应用程序中从二进制文件加载Tensorflow图,android,python,c++,tensorflow,Android,Python,C++,Tensorflow,我正在尝试将TensorFlow集成到Android应用程序中。因为我是TensorFlow的新手,所以我从非常简单的操作开始 作为第一步,我创建了以下模型: import tensorflow as tf with tf.Graph().as_default() as g: ​ x = tf.placeholder("float", [1, 10], name="input") a = tf.zeros([10, 5], dtype=tf.float32, name="a")

我正在尝试将TensorFlow集成到Android应用程序中。因为我是TensorFlow的新手,所以我从非常简单的操作开始

作为第一步,我创建了以下模型:

import tensorflow as tf

with tf.Graph().as_default() as g:
​
    x = tf.placeholder("float", [1, 10], name="input")
    a = tf.zeros([10, 5], dtype=tf.float32, name="a")
    y = tf.matmul(x, a, name="output")
    init = tf.initialize_all_variables()

    sess = tf.Session()
    sess.run(init)
​
    graph_def = g.as_graph_def()

    tf.train.write_graph(graph_def, 'models/', 'graph.pb', as_text=False) 
这个很好用。我能够从我的C++代码中正确地获得输出(然后也可以从Android中获得)。 然后我尝试使用
tf.random\u normal
生成
a
。仅仅用
tf.random\u normal
替换
tf.zero
似乎是不可行的。这是因为
tf.zero
returs是一个协变量,而
tf.random\u normal
不是。特别是,我似乎必须把它当作一个变量来处理

我遵循的想法与我在GitHub上发现的其他示例中提出的想法相同。。。因此,在编写图表之前评估
a
,如下代码所述:

import tensorflow as tf

a = tf.Variable(tf.random_normal([10, 5], dtype=tf.float32), name="a")
init = tf.initialize_all_variables()

sess = tf.Session()
sess.run(init)

a_eval = a.eval(sess)
# print here properly produces matrix in output
print a_eval
sess.close()

with tf.Graph().as_default() as g:

    x = tf.placeholder(tf.float32, [1, 10], name="input")
    a_2 = tf.constant(a_eval, name="a_2") 
    y = tf.matmul(x, a_2, name="output")
    init = tf.initialize_all_variables()

    sess = tf.Session()
    sess.run(init)

    graph_def = g.as_graph_def()

    tf.train.write_graph(graph_def, 'models/', 'graph.pb', as_text=False)
不幸的是,由于读取二进制文件时发生错误,它似乎无法工作:

超出范围:读取的字节数少于请求的字节数

这是我目前正在使用的用于从文件加载图的C++代码:

tensorflow::GraphDef graph_def;
Status load_graph_status = ReadBinaryProto(Env::Default(), filepath, &graph_def);
if (!load_graph_status.ok()) {
    LOG(ERROR) << "could not create tensorflow graph: " << load_graph_status;
    return NULL;
}
tensorflow::GraphDef graph_def;
Status load_graph_Status=ReadBinaryProto(Env::Default()、filepath和graph_def);
如果(!load\u graph\u status.ok()){

日志(错误)您是否可以尝试使用
图形定义写为
,并确保有一个名为“output”的节点
在第二张图中?@mrry显然没有任何变化,但我没有收到不同的错误消息:
FeedInputs:找不到feed输出输入
@mrry似乎我发现了一个更清楚的错误(并相应地更新了问题)。从二进制文件加载图形时,我忘了检查输出状态。由于返回的状态始终为:
超出范围:读取的字节数小于请求的字节数
。您知道这个问题吗?@mrry我解决了这个问题。我从远程url下载模型,在读取文件con时发现一个错误帐篷(在某些情况下被截断)。难以置信的是,这并没有给我的第一次实验带来任何问题。无论如何,非常感谢你的支持。它给了我一些灵感。你能试着用
将你的
图形定义为
如_text=True
,并确保有一个名为
的节点“output”吗
在第二张图中?@mrry显然没有任何变化,但我没有收到不同的错误消息:
FeedInputs:找不到feed输出输入
@mrry似乎我发现了一个更清楚的错误(并相应地更新了问题)。从二进制文件加载图形时,我忘了检查输出状态。由于返回的状态始终为:
超出范围:读取的字节数小于请求的字节数
。您知道这个问题吗?@mrry我解决了这个问题。我从远程url下载模型,在读取文件con时发现一个错误帐篷(在某些情况下被截断)。难以置信的是,这并没有给我的第一次实验带来任何问题。无论如何,非常感谢你们的支持。它给了我一些灵感。