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日

相关文章

  • 卷积神经网络入门

    CNN fly 多层卷积网络的基本理论 卷积神经网络(Convolutional Neural Network,CNN) 是一种前馈神经网络, 它的人工神经元可以响应一部分覆盖范围内的周围单元,对于大型图像处理有出色表现。它包括卷积层(alternating convolutional layer)和池层(pooling layer)。 多层卷积网络的基本可…

    2023年4月8日
    00
  • CNN卷积神经网络_MNIST手写数字识别代码实现

    环境:Win8.1 TensorFlow1.0.0 软件:Anaconda3 (集成Python3及开发环境) TensorFlow安装:pip install tensorflow (CPU版) pip install tensorflow-gpu (GPU版)   TensorFlow是一个非常强大的用来做大规模数值计算的库。其所擅长的任务之一就是实现以…

    卷积神经网络 2023年4月5日
    00
  • 轻松学Pytorch-详解Conv2D卷积处理

    轻松学Pytorch-详解Conv2D卷积处理 原创 gloomyfish OpenCV学堂 4月25日 收录于话题 #轻松学Pytorch系列 30个 图片 点击上方蓝字关注我们 微信公众号:OpenCV学堂 关注获取更多计算机视觉与深度学习知识 Conv2D基本原理与相关函数 常见的图像卷积是二维卷积,而深度学习中Conv2D卷积是三维卷积,图示如下: …

    卷积神经网络 2023年4月8日
    00
  • 利用卷积神经网络(VGG19)实现火灾分类(附tensorflow代码及训练集)

    源码地址 https://github.com/stephen-v/tensorflow_vgg_classify 1. VGG介绍 1.1. VGG模型结构 1.2. VGG19架构 2. 用Tensorflow搭建VGG19网络 3. 训练网络 参考文献 1.1. VGG模型结构 VGG网络是牛津大学Visual Geometry Group团队研发搭建…

    2023年4月8日
    00
  • 高维卷积乘法

    卷积操作对于高维(多个平面)的输入,单个卷积核的深度应和输入的深度(depth)保持一致: 维卷积运算执行完毕,得一个 2 维的平面。如果我们想要对三通道的 RGB 图片进行卷积运算,那么其对应的滤波器组也同样是三通道的。过程是将每个单通道(R,G,B)与对应的滤波器进行卷积运算求和,然后再将三个通道的和相加,将 27 个乘积的和作为输出图片的一个像素值。 …

    2023年4月6日
    00
  • [PyTorch 学习笔记] 3.2 卷积层

    本章代码:https://github.com/zhangxiann/PyTorch_Practice/blob/master/lesson3/nn_layers_convolution.py 这篇文章主要介绍了 PyTorch 中常用的卷积层,包括 3 个部分。 卷积有一维卷积、二维卷积、三维卷积。一般情况下,卷积核在几个维度上滑动,就是几维卷积。比如在图…

    2023年4月8日
    00
  • tensorflow中卷积、转置卷积具体实现方式

    卷积和转置卷积,都涉及到padding, 那么添加padding 的具体方式,就会影响到计算结果,所以搞清除tensorflow中卷积和转置卷积的具体实现有助于模型的灵活部署应用。 一、卷积 举例说明:     X:  1        2        3        4          5         6        7        8   …

    卷积神经网络 2023年4月5日
    00
  • 卷积神经网络Lenet-5实现

    原文地址:http://blog.csdn.net/hjimce/article/details/47323463 作者:hjimce 卷积神经网络算法是n年前就有的算法,只是近年来因为深度学习相关算法为多层网络的训练提供了新方法,然后现在电脑的计算能力已非当年的那种计算水平,同时现在的训练数据很多,于是神经网络的相关算法又重新火了起来,因此卷积神经网络就又…

    2023年4月6日
    00
合作推广
合作推广
分享本页
返回顶部