美文网首页
bazel编译graph_transforms

bazel编译graph_transforms

作者: haoshengup | 来源:发表于2019-03-29 19:16 被阅读0次

    一、安装bazel
      1、安装MSYS2 shell
      根据系统选择需要下载的版本,安装之后配置环境变量,例如:\msys64\usr\bin
      2、安装Microsoft Visual C++ Redistributable for Visual Studio 2015
      3、根据系统从GitHub下载bazel,例如:bazel-0.16.1-windows-x86_64.exe,下载后,改名为bazel.exe方便使用,并将所在位置添加到环境变量
      4、如果需要用到python,那么需要把python添加到环境变量;如果需要用到java,那么需要下载jdk,安装之后添加到环境变量

    二、编译graph_transforms
    1、从cmd打开tensorflow目录,输入以下指令编译:bazel build tensorflow/tools/graph_transforms:transform_graph,编译成功会显示:


    2、编译的时候,有可能会出现各种问题,根据实验猜测可能的原因:bazel有bug,bazel和tensorflow的版本不匹配。
      (1)tf1.9和tf1.10,使用bazel-0.24.0和bazel-0.17.2都无法编译
      (2)tf1.9和tf1.10,使用bazel-0.19.0编译到一半出现错误
      (3)tf1.5,使用bazel-0.19.0编译到一半出现错误
      (4)tf1.5,使用bazel-0.17.2编译成功

    3、使用tf1.5和bazel-0.17.2,编译quantize_graph,输入的指令为:bazel build tensorflow/tools/quantization:quantize_graph
      经过测试,在使用quantize_graph的时候,只有默认的round模式可以使用,其他的模式(quantize, eightbit, weights, weights_rounded)都会报错。猜测原因:版本有bug

    4、使用tf1.5和bazel-0.17.2,编译optimize_for_inference,输入的指令为:

      经过测试,optimize_for_inference可以使用。

    三、简单的方式使用quantize_graph
      实际上,在tensorflow的工具箱里有quantize_graph的python版本,可以直接使用,存放的位置:
      tensorflow\tensorflow\tools\quantization,如果下载的是tf1.5,在使用的时候和bazel编译出来的版本一样,会出现错误。接下来测试了tf1.10版本,round模式和weights模式没有问题,但是eightbit模式会出现如下错误:ValueError: zero-size array to reduction operation minimum which has no identity,找到代码错误的地方,发现是min_value = np.min(float_tensor.flatten()), max_value = np.max(float_tensor.flatten())这两行代码出错,原因是因为这个矩阵是空矩阵,在这个地方进行如下修改:

    np_modify = float_tensor.flatten()
      if np_modify.size == 0:
          min_value = 0
          max_value = 0
      else:
        min_value = np.min(float_tensor.flatten())
        max_value = np.max(float_tensor.flatten())
    

    修改之后,eightbit模式可以正常运行。

    相关文章

      网友评论

          本文标题:bazel编译graph_transforms

          本文链接:https://www.haomeiwen.com/subject/onylbqtx.html