From 585f1398e284214f07e3aca90ba5deaa6a0a8580 Mon Sep 17 00:00:00 2001 From: Your Name Date: Mon, 20 Jul 2020 17:20:01 +0800 Subject: [PATCH] write convert_dataset_to_mindspore_data_format notebook --- ...ert_dataset_to_mindspore_data_format.ipynb | 975 ++++++++++++++++++ .../csv_data/data.csv | 4 + .../images/transform.jpg | Bin 0 -> 84126 bytes .../data_preparation/converting_datasets.md | 2 + 4 files changed, 981 insertions(+) create mode 100644 tutorials/notebook/convert_dataset_to_mindspore_data_format/convert_dataset_to_mindspore_data_format.ipynb create mode 100644 tutorials/notebook/convert_dataset_to_mindspore_data_format/csv_data/data.csv create mode 100644 tutorials/notebook/convert_dataset_to_mindspore_data_format/images/transform.jpg diff --git a/tutorials/notebook/convert_dataset_to_mindspore_data_format/convert_dataset_to_mindspore_data_format.ipynb b/tutorials/notebook/convert_dataset_to_mindspore_data_format/convert_dataset_to_mindspore_data_format.ipynb new file mode 100644 index 0000000000..60f0ffe0c6 --- /dev/null +++ b/tutorials/notebook/convert_dataset_to_mindspore_data_format/convert_dataset_to_mindspore_data_format.ipynb @@ -0,0 +1,975 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#
将数据集转换为MindSpore数据格式" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 概述\n", + "\n", + "用户可以将非标准的数据集转换为MindSpore数据格式—MindRecord,从而方便地加载到MindSpore中进行训练。同时,MindSpore在部分场景做了性能优化,使用MindRecord数据格式可以获得更好的性能体验。\n", + "\n", + "MindSpore数据格式具备的特征如下:\n", + "- 实现多变的用户数据统一存储、访问,训练数据读取更加简便。\n", + "- 数据聚合存储,高效读取,且方便管理、移动。\n", + "- 高效的数据编解码操作,对用户透明、无感知。\n", + "- 可以灵活控制分区的大小,实现分布式训练。" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 整体流程\n", + "\n", + "1. 准备环节。\n", + "2. 将MNIST数据集转换为MindSpore数据格式。\n", + "3. 将CSV数据集转换为MindSpore数据格式。\n", + "4. 将CIFAR-10数据集转换为MindSpore数据格式。\n", + "5. 将CIFAR-100数据集转换为MindSpore数据格式。\n", + "6. 将ImageNet数据集转换为MindSpore数据格式。\n", + "7. 用户自定义生成MindSpore数据格式。" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 准备环节" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 导入模块\n", + "\n", + "该模块提供API以加载和处理数据集。" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "import mindspore.dataset as ds" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 创建目录" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "- 在jupyter工作目录下创建dataset目录,本次体验将所有的原始数据集都放在该目录下。\n", + "- 在jupyter工作目录下创建transform目录,本次体验将所有的转换数据集都放在该目录下。" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 将MNIST数据集转换为MindSpore数据格式" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### MNIST数据集下载" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "- 训练数据集:\n", + " > http://yann.lecun.com/exdb/mnist/train-images-idx3-ubyte.gz\n", + " > http://yann.lecun.com/exdb/mnist/train-labels-idx1-ubyte.gz\n", + "- 测试数据集:\n", + " > http://yann.lecun.com/exdb/mnist/t10k-images-idx3-ubyte.gz\n", + " > http://yann.lecun.com/exdb/mnist/t10k-labels-idx1-ubyte.gz\n", + "- 将下载好的数据集放在`jupyter工作目录/dataset/MnistData/`下,如图所示:" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + " dataset/MnistData/ \n", + " ├── t10k-images-idx3-ubyte.gz \n", + " ├── t10k-labels-idx1-ubyte.gz \n", + " ├── train-images-idx3-ubyte.gz \n", + " └── train-labels-idx1-ubyte.gz " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### MNIST数据集转换" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "`MnistToMR`这个类用于将MNIST数据集转换为MindSpore数据格式,参数用法如下:\n", + "- `source` - 包含t10k-images-idx3-ubyte.gz,train-images-idx3-ubyte.gz,t10k-labels-idx1-ubyte.gz,train-labels-idx1-ubyte.gz的目录,本例中使用变量`mnist_path`传入该参数。\n", + "- `destination` - 要转换成MindSpore数据格式文件的目录,本例中使用变量`mnist_mindrecord_path`传入该参数。\n", + "- `partition_number` - 分区的大小,默认为1,本例中使用的默认参数。" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "MSRStatus.SUCCESS" + ] + }, + "execution_count": 2, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "from mindspore.mindrecord import MnistToMR\n", + "\n", + "mnist_path = './dataset/MnistData'\n", + "mnist_mindrecord_path = './transform/mnist.record'\n", + "\n", + "mnist_transformer = MnistToMR(mnist_path,mnist_mindrecord_path)\n", + "# executes transformation from Mnist to MindRecord\n", + "mnist_transformer.transform()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "因为MNIST数据集包含训练数据集以及测试数据集,所以生成的MindSpore数据格式文件也分别是训练数据集和测试数据集的,其中.db结尾的文件保存的是描述MindSpore数据格式文件的元数据信息,切记一定不要删除它,生成的文件如下所示:" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + " transform/mnist.record_test.mindrecord \n", + " transform/mnist.record_test.mindrecord.db \n", + " transform/mnist.record_train.mindrecord \n", + " transform/mnist.record_train.mindrecord.db " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "以下内容首先加载MindSpore数据格式的数据集,本例只进行了训练数据集的加载,如果需要测试数据集的加载也是同样的操作,然后对数据创建了字典迭代器,并通过迭代器读取了一条数据记录。" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": { + "scrolled": true + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "{'data': array([255, 216, 255, 224, 0, 16, 74, 70, 73, 70, 0, 1, 1,\n", + " 0, 0, 1, 0, 1, 0, 0, 255, 219, 0, 67, 0, 2,\n", + " 1, 1, 1, 1, 1, 2, 1, 1, 1, 2, 2, 2, 2,\n", + " 2, 4, 3, 2, 2, 2, 2, 5, 4, 4, 3, 4, 6,\n", + " 5, 6, 6, 6, 5, 6, 6, 6, 7, 9, 8, 6, 7,\n", + " 9, 7, 6, 6, 8, 11, 8, 9, 10, 10, 10, 10, 10,\n", + " 6, 8, 11, 12, 11, 10, 12, 9, 10, 10, 10, 255, 192,\n", + " 0, 11, 8, 0, 28, 0, 28, 1, 1, 17, 0, 255, 196,\n", + " 0, 31, 0, 0, 1, 5, 1, 1, 1, 1, 1, 1, 0,\n", + " 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 4, 5, 6,\n", + " 7, 8, 9, 10, 11, 255, 196, 0, 181, 16, 0, 2, 1,\n", + " 3, 3, 2, 4, 3, 5, 5, 4, 4, 0, 0, 1, 125,\n", + " 1, 2, 3, 0, 4, 17, 5, 18, 33, 49, 65, 6, 19,\n", + " 81, 97, 7, 34, 113, 20, 50, 129, 145, 161, 8, 35, 66,\n", + " 177, 193, 21, 82, 209, 240, 36, 51, 98, 114, 130, 9, 10,\n", + " 22, 23, 24, 25, 26, 37, 38, 39, 40, 41, 42, 52, 53,\n", + " 54, 55, 56, 57, 58, 67, 68, 69, 70, 71, 72, 73, 74,\n", + " 83, 84, 85, 86, 87, 88, 89, 90, 99, 100, 101, 102, 103,\n", + " 104, 105, 106, 115, 116, 117, 118, 119, 120, 121, 122, 131, 132,\n", + " 133, 134, 135, 136, 137, 138, 146, 147, 148, 149, 150, 151, 152,\n", + " 153, 154, 162, 163, 164, 165, 166, 167, 168, 169, 170, 178, 179,\n", + " 180, 181, 182, 183, 184, 185, 186, 194, 195, 196, 197, 198, 199,\n", + " 200, 201, 202, 210, 211, 212, 213, 214, 215, 216, 217, 218, 225,\n", + " 226, 227, 228, 229, 230, 231, 232, 233, 234, 241, 242, 243, 244,\n", + " 245, 246, 247, 248, 249, 250, 255, 218, 0, 8, 1, 1, 0,\n", + " 0, 63, 0, 254, 127, 235, 238, 239, 128, 159, 240, 75, 111,\n", + " 248, 39, 79, 198, 159, 132, 30, 20, 241, 54, 183, 255, 0,\n", + " 5, 203, 248, 99, 224, 255, 0, 28, 107, 186, 76, 119, 122,\n", + " 207, 130, 252, 75, 224, 77, 66, 218, 219, 69, 153, 208, 55,\n", + " 217, 100, 212, 100, 149, 35, 119, 66, 66, 185, 216, 170, 8,\n", + " 109, 165, 192, 4, 248, 159, 252, 20, 87, 254, 9, 179, 241,\n", + " 239, 254, 9, 161, 241, 87, 70, 248, 109, 241, 175, 89, 240,\n", + " 198, 187, 103, 226, 159, 15, 69, 175, 120, 63, 197, 190, 12,\n", + " 213, 254, 221, 165, 235, 122, 108, 140, 202, 151, 16, 72, 85,\n", + " 27, 4, 175, 70, 81, 193, 86, 27, 149, 149, 143, 207, 180,\n", + " 87, 234, 55, 252, 18, 239, 193, 31, 240, 108, 247, 195, 77,\n", + " 47, 225, 247, 197, 95, 219, 195, 246, 144, 241, 191, 139, 188,\n", + " 119, 121, 28, 51, 107, 254, 8, 189, 240, 149, 252, 126, 28,\n", + " 208, 175, 119, 43, 129, 112, 208, 91, 239, 187, 141, 74, 237,\n", + " 56, 145, 226, 112, 199, 124, 101, 114, 107, 145, 255, 0, 131,\n", + " 151, 60, 25, 251, 95, 47, 237, 185, 165, 124, 106, 253, 160,\n", + " 188, 69, 225, 77, 123, 192, 30, 48, 240, 202, 127, 194, 137,\n", + " 215, 126, 31, 190, 116, 41, 60, 51, 11, 110, 130, 222, 217,\n", + " 119, 29, 143, 24, 157, 26, 65, 146, 25, 166, 14, 164, 163,\n", + " 46, 63, 57, 235, 91, 192, 39, 193, 195, 199, 122, 41, 248,\n", + " 136, 183, 71, 195, 227, 86, 182, 254, 221, 22, 67, 247, 198,\n", + " 207, 205, 95, 59, 203, 228, 124, 254, 94, 236, 123, 226, 191,\n", + " 94, 63, 111, 47, 248, 33, 148, 159, 240, 80, 31, 137, 94,\n", + " 31, 248, 207, 255, 0, 4, 45, 248, 47, 240, 179, 87, 248,\n", + " 73, 54, 131, 107, 109, 38, 165, 225, 47, 138, 169, 231, 73,\n", + " 46, 49, 230, 234, 54, 58, 139, 71, 37, 133, 210, 0, 86,\n", + " 72, 211, 121, 124, 6, 101, 18, 23, 21, 194, 127, 193, 124,\n", + " 62, 32, 124, 9, 248, 55, 251, 15, 254, 202, 191, 240, 75,\n", + " 143, 6, 252, 112, 209, 62, 35, 120, 247, 224, 174, 137, 168,\n", + " 77, 241, 3, 92, 240, 206, 167, 29, 245, 142, 155, 115, 114,\n", + " 80, 27, 5, 157, 73, 203, 164, 139, 42, 249, 103, 12, 145,\n", + " 195, 22, 229, 5, 128, 31, 149, 148, 81, 69, 21, 255, 217],\n", + " dtype=uint8), 'label': array(3, dtype=int64)}\n" + ] + } + ], + "source": [ + "file_name = './transform/mnist.record_train.mindrecord'\n", + "# create MindDataset for reading data\n", + "mnist_data_set = ds.MindDataset(dataset_file=file_name)\n", + "# create a dictionary iterator and read a data record through the iterator\n", + "print(next(mnist_data_set.create_dict_iterator()))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 将CSV数据集转换为MindSpore数据格式" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### CSV数据集下载" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "- 本例中需要的数据位置在https://gitee.com/mindspore/docs/tree/master/tutorials/notebook/convert_dataset_to_mindspore_data_format/csv_data/data.csv\n", + "中,使用过程中可以在此路径下找到文件并下载,并且保存在`jupyter工作目录/dataset/`下,如图所示:" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + " dataset/data.csv" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### CSV数据集转换" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "`CsvToMR`这个类用于将CSV数据集转换为MindSpore数据格式,参数用法如下:\n", + "- `source` - CSV的文件的路径,本例中使用变量`csv_path`传入该参数。\n", + "- `destination` - 要转换成MindSpore数据格式文件的目录,本例使用变量`csv_mindrecord_path`传入该参数。\n", + "- `columns_list` - 要读取的列的列表,默认为None,本例使用默认参数。\n", + "- `partition_number` - 分区的大小,默认为1,本例使用默认参数。" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "MSRStatus.SUCCESS" + ] + }, + "execution_count": 4, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "from mindspore.mindrecord import CsvToMR\n", + "from mindspore.mindrecord import FileReader\n", + "csv_path = './dataset/data.csv'\n", + "csv_mindrecord_path = './transform/csv.mindrecord'\n", + "\n", + "csv_transformer = CsvToMR(csv_path,csv_mindrecord_path) \n", + "# executes transformation from Csv to MindRecord\n", + "csv_transformer.transform()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "生成的文件如下所示:" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + " transform/csv.mindrecord \n", + " transform/csv.mindrecord.db " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "以下内容首先加载MindSpore数据格式的数据集,然后对数据创建了字典迭代器,并通过迭代器读取了一条数据记录。" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "{'b': array(b'q', dtype='|S1'), 'c': array(b'e', dtype='|S1'), 'a': array(b'w', dtype='|S1')}\n" + ] + } + ], + "source": [ + "# create MindDataset for reading data\n", + "csv_data_set = ds.MindDataset(dataset_file=csv_mindrecord_path)\n", + "# create a dictionary iterator and read a data record through the iterator\n", + "print(next(csv_data_set.create_dict_iterator()))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 将CIFAR-10数据集转换为MindSpore数据格式" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### CIFAR-10数据集下载" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "- CIFAR-10数据集:\n", + " > https://www.cs.toronto.edu/~kriz/cifar-10-python.tar.gz\n", + "- 将下载好的CIFAR-10数据集放在`jupyter工作目录/dataset/Cifar10Data/`下,如图所示:" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + " dataset/Cifar10Data/ \n", + " ├── batches.meta \n", + " ├── data_batch_1 \n", + " ├── data_batch_2 \n", + " ├── data_batch_3 \n", + " ├── data_batch_4 \n", + " ├── data_batch_5 \n", + " ├── readme.html \n", + " └── test_batch " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### CIFAR-10数据集转换" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "`Cifar10ToMR`这个类用于将CIFAR-10数据集转换为MindSpore数据格式,参数用法如下:\n", + "- `source` - 存放CIFAR-10数据集的目录,本例中使用变量`cifar10_path`传入该参数。\n", + "- `destination` - 要转换成MindSpore数据格式文件的目录,本例中使用变量`cifar10_mindrecord_path`传入该参数。" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "MSRStatus.SUCCESS" + ] + }, + "execution_count": 6, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "from mindspore.mindrecord import Cifar10ToMR\n", + "\n", + "cifar10_path = './dataset/Cifar10Data/'\n", + "cifar10_mindrecord_path = './transform/cifar10.record'\n", + "\n", + "cifar10_transformer = Cifar10ToMR(cifar10_path,cifar10_mindrecord_path)\n", + "# executes transformation from Cifar10 to MindRecord\n", + "cifar10_transformer.transform(['label'])" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "因为CIFAR-10数据集包含训练数据集以及测试数据集,所以生成的MindSpore数据格式文件也分别是训练数据集和测试数据集的,生成的文件如下所示:" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + " transform/cifar10.record \n", + " transform/cifar10.record.db \n", + " transform/cifar10.record_test \n", + " transform/cifar10.record_test.db " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "以下内容首先加载MindSpore数据格式的数据集,本例只进行了训练数据集的加载,如果需要测试数据集的加载也是同样的操作,然后对数据创建了字典迭代器,并通过迭代器读取了一条数据记录。" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "{'data': array([255, 216, 255, ..., 35, 255, 217], dtype=uint8), 'id': array(30707, dtype=int64), 'label': array(4, dtype=int64)}\n" + ] + } + ], + "source": [ + "# create MindDataset for reading data\n", + "cifar10_data_set = ds.MindDataset(dataset_file=cifar10_mindrecord_path)\n", + "# create a dictionary iterator and read a data record through the iterator\n", + "print(next(cifar10_data_set.create_dict_iterator()))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 将CIFAR-100数据集转换为MindSpore数据格式" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### CIFAR-100数据集下载" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "- CIFAR-100数据集:\n", + " > https://www.cs.toronto.edu/~kriz/cifar-100-python.tar.gz" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "- 将下载好的CIFAR-100数据集放在`jupyter工作目录/dataset/Cifar100Data/`下,如图所示:" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + " dataset/Cifar100Data/ \n", + " ├── file.txt~ \n", + " ├── meta \n", + " ├── test \n", + " └── train " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### CIFAR-100数据集转换" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "`Cifar100ToMR`这个类用于将CIFAR-100数据集转换为MindSpore数据格式,参数用法如下:\n", + "- `source` - 存放CIFAR-100数据集的目录,本例中使用变量`cifar100_path`传入该参数。\n", + "- `destination` - 要转换成MindSpore数据格式文件的目录,本例中使用变量`cifar100_mindrecord_path`传入该参数。" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "MSRStatus.SUCCESS" + ] + }, + "execution_count": 8, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "from mindspore.mindrecord import Cifar100ToMR\n", + "\n", + "cifar100_path = './dataset/Cifar100Data/'\n", + "cifar100_mindrecord_path = './transform/cifar100.record'\n", + "\n", + "cifar100_transformer = Cifar100ToMR(cifar100_path,cifar100_mindrecord_path)\n", + "#executes transformation from Cifar100 to MindRecord\n", + "cifar100_transformer.transform(['fine_label','coarse_label'])" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "因为CIFAR-100数据集包含训练数据集以及测试数据集,所以生成的MindSpore数据格式文件也分别是训练数据集和测试数据集的,生成的文件如下所示:" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + " transform/cifar100.record \n", + " transform/cifar100.record.db \n", + " transform/cifar100.record_test \n", + " transform/cifar100.record_test.db " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "以下内容首先加载MindSpore数据格式的数据集,本例只进行了训练数据集的加载,如果需要测试数据集的加载也是同样的操作,然后对数据创建了字典迭代器,并通过迭代器读取了一条数据记录。" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "{'data': array([255, 216, 255, ..., 127, 255, 217], dtype=uint8), 'fine_label': array(88, dtype=int64), 'coarse_label': array(8, dtype=int64), 'id': array(10349, dtype=int64)}\n" + ] + } + ], + "source": [ + "# create MindDataset for reading data\n", + "cifar100_data_set = ds.MindDataset(dataset_file=cifar100_mindrecord_path)\n", + "# create a dictionary iterator and read a data record through the iterator\n", + "print(next(cifar100_data_set.create_dict_iterator()))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 将ImageNet数据集转换为MindSpore数据格式" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### ImageNet数据集下载" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "- ImageNet数据集:\n", + " > http://image-net.org/download\n", + "- 将下载好的数据集放在`jupyter工作目录/dataset/ImageNetData/`下,如图所示:" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + " dataset/ImageNetData/ \n", + " ├── bounding_boxes \n", + " ├── imagenet_map.txt \n", + " ├── train \n", + " └── validation " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### ImageNet数据集转换" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "`ImageNetToMR`这个类用于将ImageNet数据集转换为MindSpore数据格式,参数用法如下:\n", + "- `map_file` - map file 应该显示标签,内容如下所示:\n", + "\n", + " n02119789 0 \n", + " n02100735 1 \n", + " n02110185 2 \n", + " n02096294 3 \n", + "本例中使用变量`imagenet_map_path`传入该参数。\n", + "\n", + "\n", + "- `image_dir` - image目录应该是包含n02119789、n02100735、n02110185、n02096294的目录,本例中使用变量`imagenet_image_dir`传入该参数。\n", + "- `destination` - 要转换成MindSpore数据格式文件的路径,本例中使用变量`imagenet_mindrecord_path`传入该参数。\n", + "- `partititon_number` - 分区的大小,本例中设置该值为4,表示会生成4个MindSpore格式文件,使用变量`partition_number`传入该参数。" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "MSRStatus.SUCCESS" + ] + }, + "execution_count": 10, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "from mindspore.mindrecord import ImageNetToMR\n", + "\n", + "imagenet_map_path = './dataset/ImageNetData/imagenet_map.txt'\n", + "imagenet_image_dir = './dataset/ImageNetData/train'\n", + "imagenet_mindrecord_path = './transform/imagenet.record'\n", + "partition_number = 4\n", + "\n", + "imagenet_transformer = ImageNetToMR(imagenet_map_path,imagenet_image_dir,imagenet_mindrecord_path,partition_number)\n", + "#executes transformation from ImageNet to MindRecord\n", + "imagenet_transformer.transform()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "因为本例中指定了分区大小为4,所以会生成4个MindSpore数据格式文件,因为数据集比较大,转换时间有点长,请耐心等待,生成的文件如下所示:" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + " transform/imagenet.record0 \n", + " transform/imagenet.record0.db \n", + " transform/imagenet.record1 \n", + " transform/imagenet.record1.db \n", + " transform/imagenet.record2 \n", + " transform/imagenet.record2.db \n", + " transform/imagenet.record3 \n", + " transform/imagenet.record3.db " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "以下内容首先加载MindSpore数据格式的数据集,虽然是自己指定了分区,但是文件之间还是相互有联系,所以不管对任何一个MindSpore数据格式文件加载,都会同时把其他三个文件一起加载,本例将imagenet.record0文件进行了加载,然后对数据创建了字典迭代器,并通过迭代器读取了一条数据记录。" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "{'label': array(564, dtype=int64), 'file_name': array(b'./dataset/ImageNetData/train/n03388183/n03388183_8017.JPEG',\n", + " dtype='|S58'), 'data': array([255, 216, 255, ..., 39, 255, 217], dtype=uint8)}\n" + ] + } + ], + "source": [ + "file_name = './transform/imagenet.record0'\n", + "# create MindDataset for reading data\n", + "imagenet_data_set = ds.MindDataset(dataset_file=file_name)\n", + "# create a dictionary iterator and read a data record through the iterator\n", + "print(next(imagenet_data_set.create_dict_iterator()))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 用户自定义生成MindSpore数据格式" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "1. 导入`FileWriter`类,用于将用户定义的原始数据写入,参数用法如下:\n", + "\n", + "\n", + "- `file_name` - MindSpore数据格式文件的文件名,本例使用变量`data_record_path`传入该参数。\n", + "- `shard_num` - MindSpore数据格式文件的数量,默认为1,取值范围在[1,1000],本例使用默认参数。" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": {}, + "outputs": [], + "source": [ + "from mindspore.mindrecord import FileWriter\n", + "data_record_path = './transform/data.record'\n", + "writer = FileWriter(data_record_path,1)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "2. 定义数据集Schema,Schema用于定义数据集包含哪些字段以及字段的类型,然后添加Schema,相关规范如下:\n", + "\n", + "\n", + "- 字段名:字母、数字、下划线。\n", + "- 字段属性type:int32、int64、float32、float64、string、bytes。\n", + "- 字段属性shape:如果是一维数组,用[-1]表示,如果是二维数组,用[m,n]表示,如果是三维数组,用[x,y,z]表示。\n", + "\n", + "本例中定义了`file_name`字段,用于标注准备写入数据的文件名字,定义了`label`字段,用于给数据打标签,定义了`data`字段,用于保存数据。" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "0" + ] + }, + "execution_count": 13, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "data_schema = {\"file_name\":{\"type\":\"string\"},\"label\":{\"type\":\"int32\"},\"data\":{\"type\":\"bytes\"}}\n", + "writer.add_schema(data_schema,\"test_schema\")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "3. 准备需要写入的数据,按照用户定义的Schema形式,准备需要写入的样本列表,本例中需要的数据位置在https://gitee.com/mindspore/docs/tree/master/tutorials/notebook/convert_dataset_to_mindspore_data_format/images/transform.jpg\n", + "中,使用过程中可以在此路径下找到图片并下载,并且保存在`jupyter工作目录/dataset/`下。" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": {}, + "outputs": [], + "source": [ + "def image_to_bytes(file_name):\n", + " f = open(file_name,'rb')\n", + " image_bytes = f.read()\n", + " f.close()\n", + " return image_bytes\n", + "\n", + "data = [{\"file_name\":\"transform.jpg\",\"label\":1,\"data\":image_to_bytes('./dataset/transform.jpg')}]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "4. 添加索引字段,添加索引字段可以加速数据读取,改步骤为可选操作。" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "MSRStatus.SUCCESS" + ] + }, + "execution_count": 15, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "indexes = [\"file_name\",\"label\"]\n", + "writer.add_index(indexes)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "5. 写入数据,最后生成MindSpore数据格式文件,`write_raw_data`接口可以被重复调用,方便用户将多个样本添加至MindSpore数据格式文件中。" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "MSRStatus.SUCCESS" + ] + }, + "execution_count": 16, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "writer.write_raw_data(data)\n", + "writer.commit()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "6. 以下内容首先加载MindSpore数据格式的数据集,然后对数据创建了字典迭代器,并通过迭代器读取了一条数据记录。" + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "{'label': array(1, dtype=int32), 'file_name': array(b'transform.jpg', dtype='|S13'), 'data': array([255, 216, 255, ..., 159, 255, 217], dtype=uint8)}\n" + ] + } + ], + "source": [ + "file_name = './transform/data.record'\n", + "# create MindDataset for reading data\n", + "define_data_set = ds.MindDataset(dataset_file=file_name)\n", + "# create a dictionary iterator and read a data record through the iterator\n", + "print(next(define_data_set.create_dict_iterator()))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 总结\n", + "\n", + "以上便是本次体验的内容,我们通过此次体验全面了解了如何通过各个相应的子模块将其他格式的数据集转换为MindSpore数据格式。" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.7.6" + } + }, + "nbformat": 4, + "nbformat_minor": 4 +} diff --git a/tutorials/notebook/convert_dataset_to_mindspore_data_format/csv_data/data.csv b/tutorials/notebook/convert_dataset_to_mindspore_data_format/csv_data/data.csv new file mode 100644 index 0000000000..de65cfe60c --- /dev/null +++ b/tutorials/notebook/convert_dataset_to_mindspore_data_format/csv_data/data.csv @@ -0,0 +1,4 @@ +a,b,c +w,q,e +w,q,e +w,q,e diff --git a/tutorials/notebook/convert_dataset_to_mindspore_data_format/images/transform.jpg b/tutorials/notebook/convert_dataset_to_mindspore_data_format/images/transform.jpg new file mode 100644 index 0000000000000000000000000000000000000000..8507a75e4b6dba1444729af86c1de0b12d859b0c GIT binary patch literal 84126 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%0A}5?+KbCeE9^`85yulkR@8V_m&nm= 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 J)#m=U_&-l@lac@c literal 0 HcmV?d00001 diff --git a/tutorials/source_zh_cn/use/data_preparation/converting_datasets.md b/tutorials/source_zh_cn/use/data_preparation/converting_datasets.md index ba744652da..550a58f434 100644 --- a/tutorials/source_zh_cn/use/data_preparation/converting_datasets.md +++ b/tutorials/source_zh_cn/use/data_preparation/converting_datasets.md @@ -15,6 +15,8 @@ +   + ## 概述 -- Gitee