TensorFlow 1.x 深度学习秘籍:6~10(2)https://developer.aliyun.com/article/1426773
工作原理
Xcode 和 CocoaPods 用于编译 TensorFlow 应用,该应用用于对不同 Inception 类别中的图像进行分类。 结果使用 iPhone 模拟器可视化。
更多
您可以直接在应用中使用 TensorFlow。 可在此处获得更多信息。
为移动设备优化 TensorFlow 图
在本秘籍中,我们将考虑不同的选项来优化在移动设备上运行的 TensorFlow 代码。 从减小模型的大小到量化,分析了不同的选项。
准备
我们将使用 Bazel 构建 TensorFlow 的不同组件。 因此,第一步是确保同时安装了 Bazel 和 TensorFlow。
操作步骤
我们按以下步骤进行优化:
/usr/bin/ruby -e "$(curl -fsSL \ https://raw.githubusercontent.com/Homebrew/install/master/install)" brew install bazel bazel version brew upgrade bazel
- 从 GitHub 克隆 TensorFlow 发行版:
git clone https://github.com/TensorFlow/TensorFlow.git
- 构建一个图转换器,汇总一下图本身:
cd ~/TensorFlow/ bazel build TensorFlow/tools/graph_transforms:summarize_graph [2,326 / 2,531] Compiling TensorFlow/core/kernels/cwise_op_greater.cc INFO: From Linking TensorFlow/tools/graph_transforms/summarize_graph: clang: warning: argument unused during compilation: '-pthread' [-Wunused-command-line-argument] Target //TensorFlow/tools/graph_transforms:summarize_graph up-to-date: bazel-bin/TensorFlow/tools/graph_transforms/summarize_graph INFO: Elapsed time: 1521.260s, Critical Path: 103.87s
- 下载 TensorFlow 图以用作示例。 在这种情况下,我们将使用 Inception v1 TensorFlow 图:
mkdir -p ~/graphs curl -o ~/graphs/inception5h.zip \ https://storage.googleapis.com/download.TensorFlow.org/models/inception5h.zip \ && unzip ~/graphs/inception5h.zip -d ~/graphs/inception5h
- 汇总 Inception 图并注意常参数的数量:1,346 万。 它们每个都存储有 32 位浮点数,这非常昂贵:
bazel-bin/TensorFlow/tools/graph_transforms/summarize_graph --in_graph=/Users/gulli/graphs/TensorFlow_inception_graph.pb Found 1 possible inputs: (name=input, type=float(1), shape=[]) No variables spotted. Found 3 possible outputs: (name=output, op=Identity) (name=output1, op=Identity) (name=output2, op=Identity) Found 13462015 (13.46M) const parameters, 0 (0) variable parameters, and 0 control_edges 370 nodes assigned to device '/cpu:0'Op types used: 142 Const, 64 BiasAdd, 61 Relu, 59 Conv2D, 13 MaxPool, 9 Concat, 5 Reshape, 5 MatMul, 3 Softmax, 3 Identity, 3 AvgPool, 2 LRN, 1 Placeholder To use with TensorFlow/tools/benchmark:benchmark_model try these arguments: bazel run TensorFlow/tools/benchmark:benchmark_model -- --graph=/Users/gulli/graphs/TensorFlow_inception_graph.pb --show_flops --input_layer=input --input_layer_type=float --input_layer_shape= --output_layer=output,output1,output2
- 编译该工具以将常量操作截断至 8 位:
bazel build TensorFlow/tools/graph_transforms:transform_graph INFO: From Linking TensorFlow/tools/graph_transforms/transform_graph: clang: warning: argument unused during compilation: '-pthread' [-Wunused-command-line-argument] Target //TensorFlow/tools/graph_transforms:transform_graph up-to-date: bazel-bin/TensorFlow/tools/graph_transforms/transform_graph INFO: Elapsed time: 294.421s, Critical Path: 28.83s
- 运行该工具以量化 Inception V1 图:
bazel-bin/TensorFlow/tools/graph_transforms/transform_graph --in_graph=/Users/gulli/graphs/inception5h/TensorFlow_inception_graph.pb --out_graph=/tmp/TensorFlow_inception_quantized.pb --inputs='Mul:0' --outputs='softmax:0' --transforms='quantize_weights' 2017-10-15 18:56:01.192498: I TensorFlow/tools/graph_transforms/transform_graph.cc:264] Applying quantize_weights
- 比较两个模型:
ls -lah /Users/gulli/graphs/inception5h/TensorFlow_inception_graph.pb -rw-r----- 1 gulli 5001 51M Nov 19 2015 /Users/gulli/graphs/inception5h/TensorFlow_inception_graph.pb ls -lah /tmp/TensorFlow_inception_quantized.pb -rw-r--r-- 1 gulli wheel 13M Oct 15 18:56 /tmp/TensorFlow_inception_quantized.pb
工作原理
量化通过将常量操作从 32 位缩减为 8 位来帮助减小模型的大小。 通常,该模型不会遭受表现的显着降低。 但是,这必须根据具体情况进行验证。
为移动设备分析 TensorFlow 图
在本秘籍中,我们将考虑不同的选项来优化 TensorFlow 代码以在移动设备上运行。 从减小模型的大小到量化,分析了不同的选项。
准备
我们将使用 Bazel 构建 TensorFlow 的不同组件。 因此,第一步是确保同时安装了 Bazel 和 TensorFlow。
并保留用于推理的操作。
TensorFlow 1.x 深度学习秘籍:6~10(4)https://developer.aliyun.com/article/1426779