Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/309.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
Python 定义tf.lite.TocoConverter的输入和输出张量_Python_Tensorflow_Tensorflow Lite - Fatal编程技术网

Python 定义tf.lite.TocoConverter的输入和输出张量

Python 定义tf.lite.TocoConverter的输入和输出张量,python,tensorflow,tensorflow-lite,Python,Tensorflow,Tensorflow Lite,我试图将这个CPM-TF模型转换为TFLite,但要使用TocoConverter,我需要指定输入和输出张量。 我运行了包含的run\u freeze\u model.py,得到了cpm\u hand\u freezed.pb(GraphDef?)文件 从这篇文章中,我复制了用于转换ProtoBuf文件的代码片段,其中包含已知的输入和输出。但是通过查看模型定义代码,我很难找到输入和输出的正确答案。 将tensorflow导入为tf 将numpy作为np导入 从配置导入标志 路径\到\冻结\图

我试图将这个CPM-TF模型转换为TFLite,但要使用TocoConverter,我需要指定输入和输出张量。

我运行了包含的
run\u freeze\u model.py
,得到了
cpm\u hand\u freezed.pb
(GraphDef?)文件

从这篇文章中,我复制了用于转换ProtoBuf文件的代码片段,其中包含已知的输入和输出。但是通过查看模型定义代码,我很难找到输入和输出的正确答案。

将tensorflow导入为tf
将numpy作为np导入
从配置导入标志
路径\到\冻结\图形DEF \ U pb='冻结\模型/cpm\手动\冻结.pb'
def总管(argv):
input_张量=[1,FLAGS.input_size,FLAGS.input_size,3]
输出\u张量=np.0(接缝的标志.num\u)
冻结图定义=tf.GraphDef()
将打开(路径到冻结的图形“rb”)作为f:
冻结的_图形_def.ParseFromString(f.read())
tflite\u model=tf.contrib.lite.toco\u convert(冻结图、输入张量、输出张量)
如果uuuu name uuuuuu='\uuuuuuu main\uuuuuuu':
tf.app.run()
我对Tensorflow很陌生,但我认为输入应该定义为
[1,FLAGS.input\u size,FLAGS.input\u size,3]
在这里发现:

不确定1代表什么,但没有一个不起作用,我猜其他参数是图像大小和颜色通道

但是,对于该输入,它将返回一个错误:
AttributeError:“int”对象没有属性“dtype”

我不知道输出应该是什么,除了它应该是一个数组


更新1

查看TF文档,似乎我需要将输入定义为张量(很明显!)。

input\u tensors=tf.placeholder(name=“img”,dtype=tf.float32,shape=(1,FLAGS.input\u size,FLAGS.input\u size,3))

这不会返回错误,但我仍然需要弄清楚输入是否正确以及输出应该是什么样子


更新2 好的,我终于用这个代码片段写出了tflite模型

def tflite_converter():
    graph_def_file = os.path.join('frozen_models', '{}_frozen.pb'.format('cpm_hand'))

    input_arrays = ['input_placeholer']
    output_arrays = [FLAGS.output_node_names]

    converter = tf.lite.TFLiteConverter.from_frozen_graph(graph_def_file, input_arrays, output_arrays)
    tflite_model = converter.convert()

    open('{}.tflite'.format('cpm_hand'), 'wb').write(tflite_model)
我希望我做得对。我将尝试在Android上对模型进行推断。 我也确实认为输入张量
输入\u占位符
中存在拼写错误。它似乎在代码本身中得到了更正,但从打印出预训练模型中的所有节点名称时,拼写
input\u placeholer
就出现了

可以在此处看到节点名称:


我的设置是:

Ubuntu 18.04
CUDA 9.1和cuDNN 7.0
Python 3.6.5
Tensorflow GPU 1.6


推理就像一个符咒,所以设置本身应该没有问题。

这个答案可能会有所帮助->@ShubhamPanchal谢谢你,但我对TF不够熟悉,无法将其应用于我的问题。我将输入张量更改为tf.placeholder()对象,该对象没有返回任何错误,但我猜我的输出与输入不同,对吗?
输入和
输出是张量列表,而不是它们的名称或输入形状。因此,让它变得非常简单。这里的张量
tf.placeholder(name=“img”,dtype=tf.float32,shape=(1,FLAGS.input\u size,FLAGS.input\u size,3))
应该在这样的数组中?还是用另一种方式
[tf.placeholder(name=“img”,dtype=tf.float32,shape=(1,FLAGS.input\u size,FLAGS.input\u size,3))
@ShubhamPanchal我再次更新了姿势-我能让你看看我的解决方案吗?你认为它会起作用吗?这个答案可能会有帮助->@ShubhamPanchal谢谢你,但我对TF不够熟悉,无法将其应用于我的问题。我将输入张量更改为tf.placeholder()对象,该对象没有返回任何错误,但我猜我的输出与输入不同,对吗?
输入和
输出是张量列表,而不是它们的名称或输入形状。因此,让它变得非常简单。这里的张量
tf.placeholder(name=“img”,dtype=tf.float32,shape=(1,FLAGS.input\u size,FLAGS.input\u size,3))
应该在这样的数组中?还是用另一种方式
[tf.placeholder(name=“img”,dtype=tf.float32,shape=(1,FLAGS.input\u size,FLAGS.input\u size,3))
@ShubhamPanchal我再次更新了姿势-我能让你看看我的解决方案吗?你认为这样行吗?