自制深度学习推理框架

您所在的位置:网站首页 pandas计算方差 自制深度学习推理框架

自制深度学习推理框架

2023-03-07 11:18| 来源: 网络整理| 查看: 265

自制深度学习推理框架-第7节-计算图中的表达式¶ 什么是表达式¶

表达式就是一个计算过程,类似于如下:

output_mid = input1 + input2 output = output_mid * input3

用图形来表达就是这样的.

image-20230113160348886

但是在PNNX的Expession Layer中给出的是一种抽象表达式,会对计算过程进行折叠,消除中间变量. 并且将具体的输入张量替换为抽象输入@0,@1等.对于上面的计算过程,PNNX生成的抽象表达式是这样的.

add(@0,mul(@1,@2)) 抽象的表达式重新变回到一个方便后端执行的计算过程(抽象语法树来表达,在推理的时候我们会把它转成逆波兰式)。

其中add和mul表示我们上一节中说到的RuntimeOperator, @0和@1表示我们上一节课中说道的RuntimeOperand. 这个抽象表达式看起来比较简单,但是实际上情况会非常复杂,我们给出一个复杂的例子:

add(add(mul(@0,@1),mul(@2,add(add(add(@0,@2),@3),@4))),@5)

这就要求我们需要一个鲁棒的表达式解析和语法树构建功能.

我们的工作¶ 词法解析¶

词法解析的目的就是将add(@0,mul(@1,@2))拆分为多个token,token依次为add ( @0 , mul等.代码如下:

enum class TokenType { TokenUnknown = -1, TokenInputNumber = 0, TokenComma = 1, TokenAdd = 2, TokenMul = 3, TokenLeftBracket = 4, TokenRightBracket = 5, }; struct Token { TokenType token_type = TokenType::TokenUnknown; int32_t start_pos = 0; //词语开始的位置 int32_t end_pos = 0; // 词语结束的位置 Token(TokenType token_type, int32_t start_pos, int32_t end_pos): token_type(token_type), start_pos(start_pos), end_pos(end_pos) { } };

我们在TokenType中规定了Token的类型,类型有输入、加法、乘法以及左右括号等.Token类中记录了类型以及Token在字符串的起始和结束位置.

如下的代码是具体的解析过程,我们将输入存放在statement_中,首先是判断statement_是否为空, 随后删除表达式中的所有空格和制表符.

if (!need_retoken && !this->tokens_.empty()) { return; } CHECK(!statement_.empty())


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3