首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Tensorflow TocoConverter出现toco_from_protos错误

Tensorflow TocoConverter出现toco_from_protos错误
EN

Stack Overflow用户
提问于 2018-10-02 05:27:01
回答 5查看 4.1K关注 0票数 4

我基本上使用freeze_graph冻结模型,然后尝试使用TocoConverter将模型转换为tflite,但它给出了错误:

代码语言:javascript
复制
RuntimeError: TOCO failed see console for info.
b'/bin/sh: 1: toco_from_protos: not found\n'
None 

下面是我的代码:

代码语言:javascript
复制
graph_def_file = './frozen_model2.pb'
input_arrays = ['IteratorGetNext']
output_arrays = ['model/fc_result/prediction/BiasAdd']

converter = tf.contrib.lite.TocoConverter.from_frozen_graph(
graph_def_file, input_arrays, output_arrays)
tflite_model = converter.convert()
open("converted_model.tflite", "wb").write(tflite_model)

任何帮助都将不胜感激!

EN

回答 5

Stack Overflow用户

发布于 2018-10-31 11:26:38

错误b'/bin/sh: 1: toco_from_protos: not found\n'表示找不到外壳命令toco_from_protos。我猜toco --help也不适合你。

我从源代码构建了TensorFlow1.9.0,所以我想我一定是搞错了设置tocotoco_from_protos等外壳命令的步骤。

总之,我的回溯是这样的:

代码语言:javascript
复制
  File "/home/casey/anaconda3/envs/mnist/lib/python3.6/site-packages/tensorflow/contrib/lite/python/lite.py", line 330, in convert
    dump_graphviz_video=self.dump_graphviz_video)
  File "/home/casey/anaconda3/envs/mnist/lib/python3.6/site-packages/tensorflow/contrib/lite/python/convert.py", line 263, in toco_convert
    input_data.SerializeToString())
  File "/home/casey/anaconda3/envs/mnist/lib/python3.6/site-packages/tensorflow/contrib/lite/python/convert.py", line 107, in toco_convert_protos
    (stdout, stderr))
RuntimeError: TOCO failed see console for info.
b'/bin/sh: 1: toco_from_protos: not found\n'
None

如果您跟踪回溯到[python path]/site-packages/tensorflow/contrib/lite/python/convert.py中的第107行,您将看到toco_convert_protos()的定义中包含一些逻辑,以将toco_from_protos作为外壳命令运行:

代码语言:javascript
复制
# TODO(aselle): When toco does not use fatal errors for failure, we can
# switch this on.
if not _toco_from_proto_bin:
    return _toco_python.TocoConvert(
        model_flags_str, toco_flags_str, input_data_str)

with _tempfile.NamedTemporaryFile() as fp_toco, \
           _tempfile.NamedTemporaryFile() as fp_model, \
           _tempfile.NamedTemporaryFile() as fp_input, \
           _tempfile.NamedTemporaryFile() as fp_output:
    fp_model.write(model_flags_str)
    fp_toco.write(toco_flags_str)
    fp_input.write(input_data_str)
    fp_model.flush()
    fp_toco.flush()
    fp_input.flush()

    cmd = [
        _toco_from_proto_bin, fp_model.name, fp_toco.name, fp_input.name,
        fp_output.name
    ]
    cmdline = " ".join(cmd)
    proc = _subprocess.Popen(
        cmdline,
        shell=True,
        stdout=_subprocess.PIPE,
        stderr=_subprocess.STDOUT,
        close_fds=True)
    stdout, stderr = proc.communicate()
    exitcode = proc.returncode
    if exitcode == 0:
      stuff = fp_output.read()
      return stuff
    else:
      raise RuntimeError("TOCO failed see console for info.\n%s\n%s\n" %
                         (stdout, stderr))

如果您的tocotoco_from_protos外壳命令不起作用,那么很明显,这一步将失败。

作为[python path]/site-packages/tensorflow/contrib/lite/python/convert.py中的一种解决方法,我进行了此更改,以强制返回第一个案例:

代码语言:javascript
复制
  if _toco_from_proto_bin:
  # if not _toco_from_proto_bin: # comment out this line to force return
    return _toco_python.TocoConvert(
        model_flags_str, toco_flags_str, input_data_str)

简奇,但它帮我完成了任务。正确的解决方案可能是重新安装具有工作toco的Tensorflow版本,或者如果您是从源代码构建,则重做bazel构建。

票数 2
EN

Stack Overflow用户

发布于 2019-03-12 23:33:14

确保toco脚本位于您的搜索路径中。检查PATH变量。

看起来它们是安装在/home/user/.local/bin中的,所以将这个添加到PATH变量中。

票数 0
EN

Stack Overflow用户

发布于 2019-05-24 05:55:12

您有两个选择

如果您不想从源Here i made video on how to fix this Error安装tensorflow,请使用

  1. 从源
  2. 下载并构建tensorflow
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52599110

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档