TOPI如何使TVM代码不那么样板化

TOPI是一个基于TVM的代码自动生成工具,它可以自动生成卷积、全连接、池化等常见的深度学习操作的代码,大大减少TVM代码编写的工作量,同时提高代码的可读性和易维护性。下面我将详细讲解TOPI如何使TVM代码不那么样板化,并附带两条示例说明。

TOPI生成样板化的TVM代码

TOPI使用了TVM中的IR (Intermediate Representation)来描述深度学习算子的计算过程,TOPI会根据输入的算子的参数和形状自动生成对应的IR,从而生成TVM代码。下面是一个常见的卷积算子的IR示例:

# Convolution
layout = "NHWC"
T = topi.tensor(layout, dtype="float32")
K = topi.tensor(layout, dtype="float32")
O = topi.nn.conv2d(T, K, strides=[1, 1], padding="VALID")

通过以上示例可以看出,TOPI生成的TVM代码是很规范的,同时也是比较样板化的,如布局layout、数据类型dtype、经常用到的算子nn.conv2d等,这些都是TVM编写过程中不可避免的样板代码。

TOPI如何使TVM代码不那么样板化

为了减少样板代码的编写,TOPI提供了一些工具函数和高级接口,使TVM代码看起来更加简洁易读,以下是几个例子:

1. topi.nn.conv2d_transpose

使用TOPI自动生成卷积反向传播的TVM代码过程中会发现,卷积反向传播需要手动生成反向传播卷积算子的代码,这样会增加编写反向传播算子的工作量,同时也会降低代码的可读性。TOPI提供了topi.nn.conv2d_transpose接口,可以自动完成卷积反向传播算子的计算,具体代码如下:

# Conv2d transpose
layout = "NHWC"
T = topi.tensor(layout, dtype="float32")
K = topi.tensor(layout, dtype="float32")
O_shape = (1, 16, 16, 8)
O = topi.nn.conv2d_transpose(T, K, output_shape=O_shape, strides=[1, 1], padding="VALID")

以上代码会自动根据卷积的参数和形状,自动生成卷积反向传播算子的代码,大大降低了编写反向传播算子的工作量。

2. topi.nn.bias_add

在卷积、全连接算子中通常都会使用偏置项来调整输出值,TOPI提供了topi.nn.bias_add接口,用于自动添加偏置项的计算,具体代码如下:

# Bias add
layout = "NHWC"
T = topi.tensor(layout, dtype="float32")
B = topi.tensor((1, 1, 1, 8), dtype="float32")
O = topi.nn.bias_add(T, B)

以上代码会自动根据输入和偏置项的形状,自动生成偏置项的计算代码,大大减少了编写偏置项计算的工作量。

示例说明

示例1:使用topi.nn.conv2d_transpose实现卷积反向传播

示例2:使用topi.nn.bias_add实现偏置项计算

# 示例1: 使用topi.nn.conv2d_transpose实现卷积反向传播
T = topi.tensor("float32", [1, 14, 14, 32])
K = topi.tensor("float32", [3, 3, 64, 32])
grad_out = topi.tensor("float32", [1, 16, 16, 64])
O = topi.nn.conv2d_transpose(grad_out, K, output_shape=T.shape, strides=[1, 1], padding="VALID")
with topi.tir.ir_pass.Simplify():
    res = topi.multiply(O, T)

# 示例2: 使用topi.nn.bias_add实现偏置项计算
T = topi.tensor("float32", [1, 16, 16, 8])
B = topi.tensor("float32", [1, 1, 1, 8])
O = topi.nn.bias_add(T, B)

以上示例演示了如何使用TOPI的高级接口和工具函数,使TVM代码不那么样板化,从而大大减少了深度学习算法实现和优化的工作量。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:TOPI如何使TVM代码不那么样板化 - Python技术站

(0)
上一篇 2023年5月15日
下一篇 2023年5月15日

相关文章

  • 卷积神经网络-吴恩达深度学习课程第四课

      时间:2021/02/16   一.卷积神经网络 1.1 计算机视觉 卷积神经网络一般应用于计算机视觉领域,由于有的时候图片的像素点很多,导致神经网络输入特征值的维数很多。   1.2 边缘检测示例 如下图所示,原图是一个6*6*1的矩阵,卷积核是一个3*3*1的矩阵,经过卷积后得到一个4*4*1的矩阵。   下图展示了垂直边缘检测的原理:   1.3 …

    2023年4月5日
    00
  • 斯坦福NLP课程 | 第11讲 – NLP中的卷积神经网络

    NLP课程第11讲介绍了卷积神经网络 (CNN)及模型细节,并讲解CNN和深度CNN在文本分类中的使用,最后介绍了Q-RNN模型。 作者:韩信子@ShowMeAI,路遥@ShowMeAI,奇异果@ShowMeAI教程地址:http://www.showmeai.tech/tutorials/36本文地址:http://www.showmeai.tech/ar…

    卷积神经网络 2023年4月7日
    00
  • PyTorch中的参数类torch.nn.Parameter()详解

    PyTorch中的参数类torch.nn.Parameter()详解 什么是torch.nn.Parameter()? torch.nn.Parameter()类是Tensor的子类,用于在神经网络中定义可学习的参数。在定义神经网络模型时,我们通常需要考虑模型的参数这一概念。但是仅仅声明一个带参数的函数是远远不够的,这种方式使用的变量是普通的Python变量…

    卷积神经网络 2023年5月15日
    00
  • 卷积与相关

      转自:https://zhuanlan.zhihu.com/p/33194385    

    2023年4月6日
    00
  • [文献阅读]基于卷积神经网络的高光谱图像深度特征提取与分类

    使用3-D CNN提取空-谱信息 主要内容 基于CNN设计了三种FE(Feature Extraction) 结构,分别提取空间,光谱和空-谱特征。其中设计了3-D CNN能够有效的提取空-谱特征,提高了分类的效果。 在训练过程中使用L2 正则化,和 Dropout 来解决训练样本太少导致的过拟合问。题 在影像预处理过程中使用了一种虚拟样本来创造训练样本。 …

    2023年4月6日
    00
  • 卷积的边缘像素填充

    #include <opencv2/opencv.hpp> #include <iostream> #include <math.h> using namespace cv; using namespace std; Mat src, dst,dst2,gray_src; char* INPUT_WIN = “input …

    卷积神经网络 2023年4月8日
    00
  • 使用卷积神经网络CNN训练识别mnist

    算的的上是自己搭建的第一个卷积神经网络。网络结构比较简单。 输入为单通道的mnist数据集。它是一张28*28,包含784个特征值的图片 我们第一层输入,使用5*5的卷积核进行卷积,输出32张特征图,然后使用2*2的池化核进行池化 输出14*14的图片 第二层 使用5*5的卷积和进行卷积,输出64张特征图,然后使用2*2的池化核进行池化 输出7*7的图片 第…

    卷积神经网络 2023年4月8日
    00
合作推广
合作推广
分享本页
返回顶部