MXNet Python Data Loading API

Introduction 介绍 MXNet 数据加载模块的主要特性.

Create A Data Iterator 介绍如何在创建一个 python 版本的 MXNet 的 Data Iterator.

How To Get Data 介绍数据源以及数据预处理工具.

IO API Reference IO API 参考文档以及它们的解释.

Introduction

这页面介绍 MXNet 的数据输入方式. MXNet 使用迭代器 (iterator)的方式向神经网络输入数据. 迭代器做了一些数据预处理, 同时以 batch 的形式向神经网络提供数据.

我们为 MNIST 图像和 RecordIO 图像提供了基本的迭代器.

为了掩盖 IO 开销, 我们提供了预处理策略, 它可以让机器学习的过程和取数据的过程并行来做. 我们使用一个单独的线程来做取数据的工作.

Parameters For Data Iterator

一般地讲, 如果你要创建一个数据迭代器, 你需要实现下面讲到的五种参数:

Dataset Param 提供数据集的基本信息, 比如说, 文件路径, 输入的数据的 shape.

Batch Param 提供构建一个 batch 的信息, 比如说 batch size.

Augmentation Param 指定输入数据的扩充方式 (e.g. crop, mirror).

Backend Param 控制后端线程掩盖数据加载开销的行为.

Auxiliary Param 提供的可选项, 用来帮助检查和 debug..

通常地讲, Dataset Param 和 Batch Param 必须 提 供, 否则 data batch 无法创建. 其他的参数根据算法和性能的需要来设置. 文档的后半部分会提供解释详尽的例子.

Create A Data Iterator

这个 IO API 提供在 python 中创建数据迭代器的简单方式. 下面的代码是如何创建一个 Cifar 的数据迭代器的代码.

>>>dataiter = mx.io.ImageRecordIter(

>>> # Utility Parameter

>>> # 可选

>>> # Name of the data, should match the name of the data input of the network

>>> # data_name='data',

>>> # Utility Parameter

>>> # 可选

>>> # Name of the label, should match the name of the label parameter of the network.

>>> # Usually, if the loss layer is named 'foo', then the label input has the name

>>> # 'foo_label', unless overwritten

>>> # label_name='softmax_label',

>>> # Dataset Parameter

>>> # Impulsary

>>> # indicating the data file, please check the data is already there

>>> path_imgrec="data/cifar/train.rec",

>>> # Dataset Parameter

>>> # Impulsary

>>> # indicating the image size after preprocessing

>>> data_shape=(3,28,28),

>>> # Batch Parameter

>>> # Impulsary

>>> # tells how many images in a batch

>>> batch_size=100,

>>> # Augmentation Parameter

>>> # 可选

>>> # when offers mean_img, each image will substract the mean value at each pixel

>>> mean_img="data/cifar/cifar10_mean.bin",

>>> # Augmentation Parameter

>>> # 可选

>>> # randomly crop a patch of the data_shape from the original image

>>> rand_crop=True,

>>> # Augmentation Parameter

>>> # Optional

>>> # randomly mirror the image horizontally

>>> rand_mirror=True,

>>> # Augmentation Parameter

>>> # Optional

>>> # randomly shuffle the data

>>> shuffle=False,

>>> # Backend Parameter

>>> # Optional

>>> # Preprocessing thread number

>>> preprocess_threads=4,

>>> # Backend Parameter

>>> # Optional

>>> # Prefetch buffer size

>>> prefetch_buffer=1)

从上面的代码中, 我们可以学到如何创建一个数据迭代器. 首先, 你需要明确的指出需要取哪种类型的数据(MNIST, ImageRecord 等等). 然后, 提供描述数据的可选参数, 比如 batching, 数据扩充方式, 多线程处理, 预取数据. MNNet 框架会检查参数的有效性, 如果一个必须的参数没有提供, 框架会报错.

How To Get Data

我们提供了 脚本 来下载MNIST数据 和Cifar10 ImageRecord 数据. 如果你要创建你自己的数据集, 我们建议您用RecordIO 作为数据格式.

Create Dataset Using RecordIO

RecordIO 实现了顺序存储 record 的数据格式. 我们建议图像数据按照 record 的格式来存储和打包到一起. 这样做的有以下几点:

将图像储存为压缩过的格式, 比如 JPEG, 因为 record 可以大小不同. 压缩过的格式可以极大的减小储存在硬盘上的数据集大小.

将若干 record 打包存储, 可以实现硬盘的连续读取, 避免随机读取硬盘.

RecordIO 容易分块, 这样分布式处理的设置会更加简单. 后面会有例子具体来说明.

我们提供了 im2rec tool 来让用户自己来生成 RecordIO 格式的数据集. 下面是具体流程:

0.Before you start

确定你已经下载了需要的数据集. 你不需要自己来做图像的 resize 操作, 现在 im2rec 这个工具可以自动来做这种操作. 你可以查看 im2rec 提供的的信息来获取更多的内容.

1.Make the image list

当你得到了信息之后, 你首先需要生成一个 image list 的文件. 格式如下

integer_image_index \t label_index \t path_to_image

通常, 这个程序会读取一个包含所有图像文件名的列表文件, shuffe 这些文件, 然后将 shuffe 后的图像文件名列表分为训练列表文件和测试列表文件. 按照下面给出的例子的格式存储.

简单的例子文件

895099 464 n04467665_17283.JPEG

10025081 412 ILSVRC2010_val_00025082.JPEG

74181 789 n01915811_2739.JPEG

10035553 859 ILSVRC2010_val_00035554.JPEG

10048727 929 ILSVRC2010_val_00048728.JPEG

94028 924 n01980166_4956.JPEG

1080682 650 n11807979_571.JPEG

972457 633 n07723039_1627.JPEG

7534 11 n01630670_4486.JPEG

1191261 249 n12407079_5106.JPEG

2.Make the binary file

需要用 im2rec 这个程序来生成二进制文件. im2rec 需要你刚刚生成的 _ image list file _ 的路径, 图像的 root 路径 和 output file 路径作为参数. 这个过程需要花费几个小时, 所以需要耐心. :)

简单的例子:

./bin/im2rec image.lst image_root_dir output.bin resize=256

要想获得更多的用法, 直接运行 ./bin/im2rec命令, 会在终端打印出详细的用法.

Extension: Mutliple Labels for a Single Image

im2rec 工具以及 mx.io.ImageRecordIter 支持对单个图像打多个标签. 假设你需要为单个图像打四个标签, 你可以按照下面的步骤来使用 RecordIO 相关的工具.

按照下面的格式生成 image list 文件:

integer_image_index \t label_1 \t label_2 \t label_3 \t label_4 \t path_to_image

使用 im2rec 时, 需要增加一个 'label_width=4' 作为命令行参数, 比如.

./bin/im2rec image.lst image_root_dir output.bin resize=256 label_width=4

在你的迭代器初始化的时候, 设置 label_width=4 和 path_imglist=<> 作为参数.

dataiter = mx.io.ImageRecordIter(

path_imgrec="data/cifar/train.rec",

data_shape=(3,28,28),

path_imglist="data/cifar/image.lst",

label_width=4

)

这样你就完成了一个多标签的数据迭代器.

.. raw:: html

IO API Reference

.. automodule:: mxnet.io

:members:

.. raw:: html

python loading_MXNet Python Data Loading API相关推荐

  1. Python 调用有道翻译api接口翻译外文网站的整篇西班牙文实战演示

    Python 调用有道翻译 api 接口翻译整篇西班牙文实战演示 第一章:翻译效果展示 ① 翻译文章示例一[阿尔卡拉门的无海摩纳哥:"不到4万欧元,你就不能在这里租任何东西."] ...

  2. python调用simulink_[Python-MATLAB] 在Python中调用MATLAB的API

    可以参考官方的说明文档: MATLAB Engine API的使用文档: 原材料: 1.MATLAB 2015a  32位的 2.Python 2.7.13    32位的 安装: 1.运行cmd,切 ...

  3. python有道翻译接口-Python调用有道翻译api实现翻译

    通过调用有道翻译的api,实现中译英.其他语言译中文 代码: # coding=utf-8 import urllib import urllib2 import json import time i ...

  4. Python从无到有搭建接口(API)自动化测试框架

    目录 1.前言 2.思路 3.正文 一.路径模块-initPath.py 二.配置文件模块-getConfig.py 三.读取用例模块-getCase.py 四.数据库操作模块-operatorDB. ...

  5. python金字塔函数_Pyramid Python量化学习笔记:API的基本方法,金字塔

    一.init(必须实现) init(context) context对象是全文对象,我也不懂是啥意思,以前学掘金量化也有这个,大概是连接上下文通用的意思吧. 用法是context.xx,整个函数都可以 ...

  6. Python调用百度通用翻译api

    Python调用百度通用翻译api 首先 首先 首先需要先去百度翻译api官网注册成为开发者,然后申领一下通用翻译的appid和密钥. 附上代码,默认为源语言自动识别,效果感觉不是太好,目标语言默认为 ...

  7. python使用百度云的API识别图片中的文字

    python使用百度云的API识别图片中的文字 # coding=utf-8import sys import json import base64IS_PY3 = sys.version_info. ...

  8. python使用fpdf的multi_cell API实现长文本写入的自动换行功能实战

    python使用fpdf的multi_cell API实现长文本写入的自动换行功能实战 目录 python使用fpdf的multi_cell API实现长文本写入的自动换行功能实战

  9. python语言实例-Python语言实现百度语音识别API的使用实例

    未来的一段时间,人工智能在市场上占有很重的位置,Python语言则是研究人工智能的最佳编程语言,下面,就让我们来感受一下它的魅力吧! 百度给的样例程序,不论C还是Java版,都分为method1和me ...

最新文章

  1. angularjs 学习笔记 简单基础
  2. 语音公司集体杀入AI芯片 2019场景落地战打响!
  3. python【数据结构与算法】各进制转换-使用内置函数
  4. 综合模拟试题计算机指南,综合全国计算机文管二级模拟试题.doc
  5. 基本数据类型的自动装箱
  6. 使用Kotlin开发Android应用 - 环境搭建 (1)
  7. IntelliJ IDEA 详细图解最常用的配置
  8. 三维里面点击播放视频
  9. 构建Docker镜像仓库的另一选择:Nexus3 - DockOne.io
  10. 麦吉尔大学 计算机科学和阿尔伯特,加拿大低龄留学-阿尔伯特学院-Albert College...
  11. openinstall的价值就是帮助App开发者成功
  12. Apple pencil 无法连接到ipad的解决办法汇总
  13. (《机器学习》完整版系列)第5章 神经网络——5.2 RBF网络(单层RBF就可解决异或问题)与ART网络(实现“自适应谐振”)
  14. 23个 Web 开发中的侧边栏菜单练习实例
  15. python中\t \r \s \n \f各种转移字符含义
  16. (转)魔兽世界里所有钥匙的搜集或制作方法
  17. 一文了解云计算,全世界一台计算机
  18. 数组双指针之快慢指针
  19. 信用卡评测系列——阳光惠生活APP深化服务客户品牌理念,焕新升级7.0版
  20. 美术课上用计算机玩游戏,电脑绘画校本课程总结

热门文章

  1. jqueryrotate 使用 帮助 笔记 学习
  2. IP地址不够了,有办法吗?
  3. java聊天室 博客_java网络聊天室
  4. arm 饱和指令_ARM平台下NEON使用方法详解
  5. golang微服务框架对比_微服务里程碑,Golang与Spring Cloud Alibaba完美结合
  6. logback的使用和logback.xml详解
  7. 测试Python下载图片的三种方法
  8. 智能车竞赛技术报告 | 节能信标组 - 中国计量大学 - 赛博 - 8
  9. 逐飞 RT1064 库 GCC (VSCode) 移植踩坑
  10. 两所大学中的智能车竞赛校内赛