TensorFlow Frontend前端

TensorFlow前端有助于将TensorFlow模型导入TVM。

Supported versions:

  • 1.12 and below

Tested models:

  • Inception (V1/V2/V3/V4)
  • Resnet (All)
  • Mobilenet (V1/V2 All)
  • Vgg (16/19)
  • BERT (Base/3-layer)

Preparing a Model for Inference准备推理模型

Remove Unneeded Nodes删除不需要的节点

导出过程将删除许多不需要进行推理的节点,但不幸的是会留下一些剩余的节点。应该手动删除的节点:

Convert None Dimensions to Constants将无尺寸Dimensions转换为常数

TVM对动态张量形状的支持最少。None应将尺寸替换为常量。例如,模型可以接受带有shape的输入(None,20)。这应转换为的形状(1,20)。应该相应地修改模型,以确保这些形状在整个图形中都匹配。

Export

TensorFlow前端需要冻结的protobuf(.pb)或保存的模型作为输入。不支持检查点(.ckpt)。TensorFlow前端所需的graphdef,可以从活动会话中提取,可以使用TFParser帮助器类提取。

应该导出该模型并进行许多转换,以准备模型进行推理。设置`add_shapes=True`也很重要,因为这会将每个节点的输出形状嵌入到图形中。这是一个给定会话将模型导出为protobuf的函数:

import tensorflow as tf

from tensorflow.tools.graph_transforms import TransformGraph

def export_pb(session):

with tf.gfile.GFile("myexportedmodel.pb", "wb") as f:

inputs = ["myinput1", "myinput2"] # replace with your input names

outputs = ["myoutput1"] # replace with your output names

graph_def = session.graph.as_graph_def(add_shapes=True)

graph_def = tf.graph.util.convert_variables_to_constants(session, graph_def, outputs)

graph_def = TransformGraph(

graph_def,

inputs,

outputs,

[

"remove_nodes(op=Identity, op=CheckNumerics, op=StopGradient)",

"sort_by_execution_order", # sort by execution order after each transform to ensure correct node ordering

"remove_attribute(attribute_name=_XlaSeparateCompiledGradients)",

"remove_attribute(attribute_name=_XlaCompile)",

"remove_attribute(attribute_name=_XlaScope)",

"sort_by_execution_order",

"remove_device",

"sort_by_execution_order",

"fold_batch_norms",

"sort_by_execution_order",

"fold_old_batch_norms",

"sort_by_execution_order"

]

)

f.write(graph_def.SerializeToString())

Another method is to export and freeze the graph.

Import the Model

Explicit Shape:

确保可以在整个图形中知道形状,将`shape`参数传递给`from_tensorflow`。该词典将输入名称映射到输入形状。

Data Layout

大多数TensorFlow模型以NHWC布局发布。NCHW布局通常提供更好的性能,尤其是在GPU上。该TensorFlow前端可以通过传递参数自动转换模型的数据布局`layout='NCHW'`到`from_tensorflow`。

Best Practices

  • 使用静态张量形状代替动态形状(删除`None`尺寸)。
  • `TensorArray`目前尚不支持使用静态RNN代替动态RNN。

Supported Ops

  • Abs
  • Add
  • AddN
  • All
  • Any
  • ArgMax
  • ArgMin
  • AvgPool
  • BatchMatMul
  • BatchMatMulV2
  • BatchNormWithGlobalNormalization
  • BatchToSpaceND
  • BiasAdd
  • BroadcastTo
  • Cast
  • Ceil
  • CheckNumerics
  • ClipByValue
  • Concat
  • ConcatV2
  • Conv2D
  • Cos
  • Tan
  • CropAndResize
  • DecodeJpeg
  • DepthwiseConv2dNative
  • DepthToSpace
  • Dilation2D
  • Equal
  • Elu
  • Enter
  • Erf
  • Exit
  • Exp
  • ExpandDims
  • Fill
  • Floor
  • FloorDiv
  • FloorMod
  • FusedBatchNorm
  • FusedBatchNormV2
  • Gather
  • GatherNd
  • GatherV2
  • Greater
  • GreaterEqual
  • Identity
  • IsFinite
  • IsInf
  • IsNan
  • LeakyRelu
  • LeftShift
  • Less
  • LessEqual
  • Log
  • Log1p
  • LoopCond
  • LogicalAnd
  • LogicalOr
  • LogicalNot
  • LogSoftmax
  • LRN
  • LSTMBlockCell
  • MatMul
  • Max
  • MaxPool
  • Maximum
  • Mean
  • Merge
  • Min
  • Minimum
  • MirrorPad
  • Mod
  • Mul
  • Neg
  • NextIteration
  • NotEqual
  • OneHot
  • Pack
  • Pad
  • PadV2
  • Pow
  • Prod
  • Range
  • Rank
  • RealDiv
  • Relu
  • Relu6
  • Reshape
  • ResizeBilinear
  • ResizeBicubic
  • ResizeNearestNeighbor
  • ReverseV2
  • RightShift
  • Round
  • Rsqrt
  • Select
  • Selu
  • Shape
  • Sigmoid
  • Sign
  • Sin
  • Size
  • Slice
  • Softmax
  • Softplus
  • SpaceToBatchND
  • SpaceToDepth,
  • Split
  • SplitV
  • Sqrt
  • Square
  • SquareDifference
  • Squeeze
  • StridedSlice
  • Sub
  • Sum
  • Switch
  • Tanh
  • TensorArrayV3
  • TensorArrayScatterV3
  • TensorArrayGatherV3
  • TensorArraySizeV3
  • TensorArrayWriteV3
  • TensorArrayReadV3
  • TensorArraySplitV3
  • TensorArrayConcatV3
  • Tile
  • TopKV2
  • Transpose
  • TruncateMod
  • Unpack
  • UnravelIndex
  • Where
  • ZerosLike

TensorFlow Frontend前端的更多相关文章

  1. front-end 前端发展学习路线参考图

    front-end 前端发展学习路线参考图 学习的路程还很长~!

  2. 大前端技术系列:TWA技术+TensorFlow.js => 集成原生和AI功能的app

    大前端技术系列:TWA技术+TensorFlow.js => 集成原生和AI功能的app ( 本文内容为melodyWxy原作,git地址:https://github.com/melodyWx ...

  3. Magento2.X 前端&综合 简要

    主题是Magento的应用程序,它提供了整个应用的前端部分: 主题旨在覆盖或自定义视图层资源,通过模块和库最初提供.主题由不同的供应商(前端开发人员)实施,并拟分配为类似于其他组件的Magento系统 ...

  4. Vue(三)之前端路由

    01-前端路由 1.前端路由的实现原理 vue+vue-router 主要来做单页面应用(Single Page Application) 为什么我们要做单页面应用? (1)传统的开发方式 url改变 ...

  5. windows10(64位)Anaconda3+Python3.6搭建Tensorflow(cpu版本)及keras

    转自:windows10(64位)Anaconda3+Python3.6搭建Tensorflow(cpu版本)及keras 1.本来电脑安装的是anaconda3 5.3.1,但安装的python版本 ...

  6. 前端路由vue-router介绍

    一.前端路由vue-router介绍 Vue-Router 是 Vue.js 官方的路由管理器.它和 Vue.js 的核心深度集成,让构建单页面应用变得易如反掌.包含的功能有: 嵌套的路由/视图表 模 ...

  7. TensorFlow基础剖析

    TensorFlow基础剖析 一.概述 TensorFlow 是一个使用数据流图 (Dataflow Graph) 表达数值计算的开源软件库.它使 用节点表示抽象的数学计算,并使用 OP 表达计算的逻 ...

  8. TVM 架构设计

    TVM 架构设计 本文面向希望了解TVM体系结构和/或积极参与项目开发的开发人员. 主要内容如下: 示例编译流程概述了TVM将模型的高级概念转换为可部署模块的步骤. 逻辑架构组件部分描述逻辑组件.针对 ...

  9. Magento学习第一课——目录结构介绍

    Magento学习第一课--目录结构介绍 一.Magento为何强大 Magento是在Zend框架基础上建立起来的,这点保证了代码的安全性及稳定性.选择Zend的原因有很多,但是最基本的是因为zen ...

随机推荐

  1. POJ2983 查分约束系统

    题意:        给你n个点,然后给你两种情况,P a b c,表明a在b的北边c那么远,V a b 表明a在b的北边(距离最少是1),问你这些条件是否冲突. 思路:       一开始想用带权并 ...

  2. LA3902网络

    题意:      给你一棵树,所有叶子节点都是客户端,其他的都是服务器,然后问你最少在多少个服务器上安装VOD能使所有的客户端都能流畅的看视频,流畅看视频的条件是每个客户端距离他最近的安装VOD的服务 ...

  3. hdu5025 状态压缩广搜

    题意:       悟空要救唐僧,中途有最多就把钥匙,和最多五条蛇,要求就得唐僧并且拿到所有种类的钥匙(两个1只拿一个就行),拿钥匙i之前必须拿到钥匙i-1,打蛇多花费一秒,问救出唐僧并且拿到所有种类 ...

  4. MFC ListControl用法合集

    以下未经说明,listctrl 默认view 风格为report ------------------------------------------------------------------- ...

  5. Python中Socket编程server与client简单的合法性认证

    导入python自带的hmac模块对随机生成的位数32字节和自定义token进行加密处理 import osmsg = os.urandom(32)  #随机生成msgOut[4]: b"F ...

  6. MFC对话框不能使用菜单更新宏ON_UPDATE_COMMAND_UI

    菜单更新宏的原理 更新处理宏的工作原理是基于框架窗口类的.MFC中对话框菜单更新宏的原理是:当我们使用从CFrameWnd框架窗口类中派生的类创建窗口时,当我们单击菜单且菜单还未弹出前会产生WM_IN ...

  7. 理解微信小程序的双线程模型

    有过微信小程序开发经验的朋友应该都知道"双线程模型"这个概念,本文简单梳理一下双线程模型的一些科普知识,学识浅薄,若有错误欢迎指正. 我以前就职于「小程序·云开发」团队,在对外的一 ...

  8. Linux常见错误解决办法

    1. 程序运行的一些基础知识 1. 编译程序时去哪找头文件? 系统目录:就是交叉编译工具链里的某个 include 目录:也可以自己指定:编译时用 " -I dir "选项指定. ...

  9. TypeScript 中 Optional Chaining 和 Nullish Coalescing

    Optional Chaining 解决的问题是重复且无意义的判空,之所以说无意义,是对业务来说它不是必需的,但不判空,程序直接就挂了,比如: let x = foo.bar.baz();   这里的 ...

  10. Qt事件与常用事件处理、过滤

    转载: https://blog.csdn.net/apollon_krj/article/category/6939539 https://blog.csdn.net/qq_41072190/art ...