MxNet系列——how_to——bucketing

2023-05-16

博客新址: http://blog.xuezhisd.top
邮箱:xuezhisd@126.com


在MXNet中使用Bucketing

Bucketing是一种训练多个不同但又相似的结构的网络,这些网络共享相同的参数集。一个典型的应用是循环神经网络(RNNs)。在使用符号网络定义的工具箱中,实现RNNs通常会沿时间轴将网络显式地展开。显式地展开RNNs之前需要知道序列的长度。为了处理序列中的所有元素,我们需要将网络展开成最大可能的序列长度。然而这很浪费资源,因为对于较短的序列,大部分计算都是在填充后的数据上执行的。

Bucketing,是从 Tensorflow’s sequence training example 借鉴而来的一个简单的方法。它不再将网络展开成最大可能长度,而是展开成多个不同长度的实例(比如,长度为5, 10, 20, 30)。在训练过程中,对于不同长度的最小批数据,我们使用最恰当的展开模型。对于RNNs,尽管这些模型具有不同的架构,但参数在时间轴上是共享的。尽管选出的不同bucket的模型,并以不同的最小批来训练,但本质上都是在优化相同的参数集。MXNet 在所有的执行器中重复使用中间的存储缓存。

对于简单的RNNs,可以使用一个for循环来遍历输入序列,通过保持状态和沿时间的梯度之间的连接的方式沿时间反向传播。而然,这可能会使降低处理速度。这个方法能够处理不同长度的序列。但对于更加复杂的模型(比如,使用序列到序列网络的翻译模型)来说,并不容易展开。在这个例程中,我们将介绍MXNet的允许我们事先bucketing的APIs。

不同长度的序列训练PTB

在这个例程中,我们使用 PennTreeBank language model example 。如果你对这个例程不熟悉,请首先查看 原教程 (in Julia)。

例程中使用的架构是两个LSTM层,加一个简单的单词嵌入层。原例程将模型沿时间展开成固定长度(32)。本例程将介绍如何使用bucketing来实现变长序列训练。

为了使用bucketing,MXNet需要知道如何为不同长度的序列构建一个新的展开的符号架构(图)。为了实现这个目的,我们不是构建一个使用固定 Symbol 的模型,而是使用一个回调函数,该函数对新的bucket key 生成一个新的 Symbol

model = mx.model.FeedForward(
        ctx     = contexts,
        symbol  = sym_gen)

sym_gen 必须是一个函数,它只有一个输入,即 bucket_key;并为这个bucket返回一个 Symbol。我们使用序列长度作为 bucket key。任何对象都可以用作bucket key。比如,在神经网络翻译应用中,不同长度的输入和输出序列的组合对应于不同的展开方式,一对长度值(输入/输出长度)可以用作bucket key。

def sym_gen(seq_len):
    return lstm_unroll(num_lstm_layer, seq_len, len(vocab),
                       num_hidden=num_hidden, num_embed=num_embed,
                       num_label=len(vocab))

数据迭代器需要报告 default_bucket_key,它允许MXNet在读取数据之前初始化参数。现在,模型能够以不同的buckets进行训练,这是通过共享参数和不同buckets之间的计算缓存。

为了训练,我们还需要为 DataIter 添加一些额外的bits。除了报告之前提到的 default_bucket_key之外,还需要为每最小批报告当前的 bucket_key。更具体的说,在每个最下批中,通过 DataIter 返回的 DataBatch 对象需要包含下面的附加属性:

  • bucket_key: 对应于一批数据的 bucket key。 在本例程中,它是指一批数据的序列长度。如果该bucket key对应的执行器还没有创建,将根据由函数 gen_sym 以bucket key为参数生成的符号模型,构建该bucket key对应的执行器。该执行器将会放在缓存中,以便未来使用。注意:生成的 Symbols 可能是任意的,但他们应具有相同的可训练参数和辅助状态。
  • provide_data: 和 DataIter 对象报告的信息相同。 因为现在每个bucket都对应一个不同的架构,它们可以有不同的输入。同时,确保 DataIter 对象返回的 provide_data 信息和 default_bucket_key的架构是兼容的。.
  • provide_label: 和 provide_data相同。

现在,DataIter 负责将数据分到不同的 buckets。 假如已经激活随机化,在么个最小批中,DataIter 随机选择一个 bucket (根据一个由bucket尺寸均衡的分布),然后从bucket中随机选择一个序列来组成一个最小批数据。如果有必要,它将对最小批中的不同长度的序列进行填充。

获取一个读取文本序列的 DataIter (它通过实现上述的API)的完整实现,请查看 example/rnn/lstm_ptb_bucketing.py。在本例中,你可以使用静态配置的 bucketing (比如,buckets = [10, 20, 30, 40, 50, 60]), 或者让 MXnet 根据dataset (buckets = [])自动生成 bucketing。后一种方法是通过添加一个和长度和输入数量相同的bucket(bucket足够长)来实现的。获取更多信息,请查看 default_gen_buckets().

Beyond Sequence Training

在本例程中,简单的描述了bucketing API是如何工作的。然而,bucketing API不限于上文使用的序列长度的bucketing。bucket的键(key)可以是任意的对象,只要 gen_sym 返回的架构兼容即可。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

MxNet系列——how_to——bucketing 的相关文章

  • How to make linux boot from network

    1 Enable dhcp server on a linux server the etc dhcpd conf should be looked like this ddns update style interim ignore cl
  • MXNet 中文文档

    MXNet 中文文档 MXNet 中文文档 MXNet设计和实现简介编程接口 Symbol 声明式的符号表达式NDArray命令式的张量计算KVStore 多设备间的数据交互读入数据模块训练模块 系统实现 计算图 计算图优化内存申请 引擎数
  • MxNet系列——how_to——torch

    博客新址 http blog xuezhisd top 邮箱 xff1a xuezhisd 64 126 com 如何将MXNet用作Torch的前后端 本章节描述了如何将MXNet用作Torch的两个主要功能 xff08 前端和后端 xf
  • MxNet系列——how_to——smart_device

    博客新址 http blog xuezhisd top 邮箱 xff1a xuezhisd 64 126 com 将深度学习库压缩成一个文件 xff0c 以便移植到智能设备中 深度学习系统是复杂的 xff0c 并且常常有些依赖环境 将深度学
  • MxNet系列——how_to——multi_devices

    博客新址 http blog xuezhisd top 邮箱 xff1a xuezhisd 64 126 com 在多个CPU GPUs上以数据并行方式运行MXNet MXNet 支持在多个CPUs和GPUs上进行训练 其中 xff0c 这
  • MxNet系列——get_started——amazonlinux_setup

    博客新址 http blog xuezhisd top 邮箱 xff1a xuezhisd 64 126 com Installing MXNet on Ubuntu 对于 Amazon Linux 操作系统上的Python用户来说 xff
  • MxNet系列——community——contribute

    博客新址 http blog xuezhisd top 邮箱 xff1a xuezhisd 64 126 com 对MXNet做贡献 MXNet是由一群活跃的社区成员开发和使用的 请对其贡献 xff0c 以改善它 当你的补丁被合并时 xff
  • How To Install and Configure VNC Server on Ubuntu 20.04

    From https tecadmin net install vnc server on ubuntu 20 04 text 61 1 20How 20To 20Install 20and 20Configure 20VNC 20Serv
  • [How To] Remove deleted records from Main Index in Sphinx

    http www sanisoft com blog 2013 06 28 remove deleted records in sphinx The problem You probably landed here searching fo
  • How Android Handles Touches

    Touch System overview Touch Event Framework Custom Touch Handling System Provided Touch Handlers System Provided Gesture
  • HOW TO install nam for ns2 on debian

    Debian is convinent to install software packages for the tool aptl Like many other packages we can use apt get install n
  • Windows10上编译MXNet源码操作步骤(Python)

    1 按照https blog csdn net fengbingchun article details 84997490 中操作步骤首先在Windows上通过VS2017编译MXNet源代码 2 从 https mxnet incubat
  • 移动端unet人像分割模型--1

    个人对移动端神经网络开发一直饶有兴致 去年腾讯开源了NCNN框架之后 一直都在关注 近期成功利用别人训练好的mtcnn和mobilefacenet模型制作了一个ios版本人脸识别swift版本demo 希望maskrcnn移植到ncnn 在
  • c++调用mxnet模型做预测

    python在深度学习领域很火 做实验用python很舒服 但是生产环境下可能还是需要c c 那么问题来了 mxnet训练出来的模型如何在c c 下调用 以下是一些填坑的经验分享一下 mxnet支持c c 调用模型 但目前不是全部的网络模型
  • 使用MXNet完成一个基于FCN的盲道实时语义分割

    使用MXNet完成一个基于FCN的盲道识别语义分割 一点说明 基本原理 测试集效果 数据标注 训练 基本设置 读入数据 网络构建 开始训练 测试 一点说明 前段时间根据gluon的教程动手学深度学习和同学项目实地拍摄的盲道图片完成了一个基于
  • mxnet——模型加载与保存

    一 加载模型与pretrain模型network相同 loading predict module data shape G 96 Batch namedtuple Batch data sym arg params aux params
  • c++ 用vs2019编译mxnet1.9.0

    一 编译环境之windows10 编译出动态库libmxnet dll libmxnet lib mxnet 70 lib及include头文件 一 环境及依赖 1 Windows10 2 Cuda11 1 3 Cudnn8 1 0 77
  • MXNet简介

    MXNet是一个十分优秀的深度学习框架 目前包含了许多语言接口 如Python C Scala R等 目前 MXNet版本已经更新到1 3 0 本系列文章主要使用Python接口 在MXNet官网 1 上 官方建议新手使用Python接口
  • log_softmax() 如何实现以更快的速度和数值稳定性计算其值(和梯度)?

    MXNet 和 PyTorch 都提供了计算 log 的特殊实现 softmax 速度更快 数值更稳定 但是 我在这两个包中都找不到该函数 log softmax 的实际 Python 实现 谁能解释一下这是如何实现的 或者更好的是 给我指
  • MXNet:nn.Activation 与 nd.relu?

    我是 MXNet 新手 我在 Python3 中使用它 他们的教程系列鼓励您定义自己的gluon blocks http gluon mxnet io chapter03 deep neural networks plumbing html

随机推荐

  • Eigen教程5 - 求解稀疏线性方程组

    博客新址 http blog xuezhisd top 邮箱 xff1a xuezhisd 64 126 com Eigen中有一些求解稀疏系数矩阵的线性方程组 由于稀疏矩阵的特殊的表示方式 xff0c 因此获得较好的性能需要格外注意 查看
  • Eigen教程6 - Matrix-free solvers

    博客新址 http blog xuezhisd top 邮箱 xff1a xuezhisd 64 126 com Matrix free solvers 像ConjugateGradient 和 BiCGSTAB这样的迭代求解器可以用在 m
  • Eigen教程7 - Eigen和Matlab的比较

    博客新址 http blog xuezhisd top 邮箱 xff1a xuezhisd 64 126 com Eigen和Matlab比较 参考 http eigen tuxfamily org dox AsciiQuickRefere
  • MxNet系列——how_to——perf

    博客新址 http blog xuezhisd top 邮箱 xff1a xuezhisd 64 126 com 性能 下面是一些技巧 xff0c 以尽可能的获取MXNet的最佳性能 数据 对于输入数据 xff0c 需要注意以下内容 xff
  • MxNet系列——how_to——visualize_graph

    博客新址 http blog xuezhisd top 邮箱 xff1a xuezhisd 64 126 com 如何将神经网络可视化为计算图 该章节描述了如何在MXNet中使用在mx viz plot network来可视化 xff08
  • 修改antlr错误信息输出格式的方法

    找到 antlr DefaultFileLineFormatter java 修改类DefaultFileLineFormatter的函数getFormatString 我将其修改如下 以适应vc的错误信息输出格式 package antl
  • MxNet系列——how_to——torch

    博客新址 http blog xuezhisd top 邮箱 xff1a xuezhisd 64 126 com 如何将MXNet用作Torch的前后端 本章节描述了如何将MXNet用作Torch的两个主要功能 xff08 前端和后端 xf
  • MxNet系列——how_to——smart_device

    博客新址 http blog xuezhisd top 邮箱 xff1a xuezhisd 64 126 com 将深度学习库压缩成一个文件 xff0c 以便移植到智能设备中 深度学习系统是复杂的 xff0c 并且常常有些依赖环境 将深度学
  • MxNet系列——how_to——new_op

    博客新址 http blog xuezhisd top 邮箱 xff1a xuezhisd 64 126 com 如何创建新的操作符 网络层 本节内容描述了创建新的MXNet操作符 xff08 或网络 xff09 的过程 我们已经尽了最大努
  • MxNet系列——how_to——multi_devices

    博客新址 http blog xuezhisd top 邮箱 xff1a xuezhisd 64 126 com 在多个CPU GPUs上以数据并行方式运行MXNet MXNet 支持在多个CPUs和GPUs上进行训练 其中 xff0c 这
  • MxNet系列——how_to——model_parallel_lstm

    博客新址 http blog xuezhisd top 邮箱 xff1a xuezhisd 64 126 com 使用模型并行的方式在多个GPUs上训练LSTM 由于复杂的数据依赖 xff0c LSTM评价很困难 LSTM的训练过程 xff
  • MxNet系列——how_to——index

    博客新址 http blog xuezhisd top 邮箱 xff1a xuezhisd 64 126 com MXNet 怎么办系列 How tos 提供了一系列的有关安装 xff0c 基本概念 xff0c 说明 xff0c 命令和使用
  • MxNet系列——how_to——faq

    博客新址 http blog xuezhisd top 邮箱 xff1a xuezhisd 64 126 com 常见问题 本节回答了 mxnet issues上的常见问题 在提问前 xff0c 请先检查该页面 如果你想要贡献本页面 xff
  • MxNet系列——how_to——env_var

    博客新址 http blog xuezhisd top 邮箱 xff1a xuezhisd 64 126 com 环境变量 环境可以修改MXNet的一些设置 一般情况下 xff0c 你不需要修改这些设置 本节将它们罗列出来 xff0c 用于
  • MxNet系列——how_to——develop_and_hack

    博客新址 http blog xuezhisd top 邮箱 xff1a xuezhisd 64 126 com 开发和 Hack MXNet 创建新的操作符在MXNet中使用Torch设置MXNet的环境变量 其它资源 概述 MXNet的
  • MxNet系列——how_to——cloud

    博客新址 http blog xuezhisd top 邮箱 xff1a xuezhisd 64 126 com 在云上配置MXNet 从头开始设置一个AWS的GPU集群 本节提供了如何设置AWS集群以使用MXNet的详细教程 描述了如何
  • windows下使用qt编程的一些问题

    我下载了windows下qt的几个版本 qt win free 3 3 1 qt win free msvc 3 3 1还有一个qt3 0 5msvc的eval版 那个eval的版本expired了 但是只有这个版本向vc的addin目录中
  • linux创建ftp用户且限制访问目录

    1 使用root用户登录服务器 2 添加用户test xff0c 并设置路径 useradd d data sftp test test 3 为test用户设置密码 passwd test 4 查看passwd文件中是否存在test x 1
  • MxNet系列——how_to——caffe

    博客新址 http blog xuezhisd top 邮箱 xff1a xuezhisd 64 126 com 如何在MXNet中使用Caffe操作符 Caffe 是一个有名的 xff0c 广泛使用的深度学习框架 MXNet 支持在它的符
  • MxNet系列——how_to——bucketing

    博客新址 http blog xuezhisd top 邮箱 xff1a xuezhisd 64 126 com 在MXNet中使用Bucketing Bucketing是一种训练多个不同但又相似的结构的网络 xff0c 这些网络共享相同的