Android应用程序中从二进制文件加载Tensorflow图
我正在尝试将TensorFlow集成到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")
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时发现一个错误帐篷(在某些情况下被截断)。难以置信的是,这并没有给我的第一次实验带来任何问题。无论如何,非常感谢你们的支持。它给了我一些灵感。