《昇思25天学习打卡营第1天|基本介绍&快速入门之MINST手写数字识别数据集处理》
学习时间
学习心得:
昇思(MindSpore)框架提供了简洁的API和丰富的文档,使得即使是初学者也能够快速上手,让我能够按照教程轻松地完成数据集的下载和预处理。通过组合不同的组件来完成数据下载和预处理任务,以及对数据对象的数据类型和大小进行查看。
最重要的是,昇思(MindSpore)的社区活跃,遇到问题时可以快速找到解决方案或者获得社区的帮助。
昇思MindSpore介绍
昇思(MindSpore)框架是华为推出的一款开源的全场景 AI 计算框架。
具有以下一些特点和优势:
1、支持端边云全场景协同:能够在不同的设备和场景中实现高效的模型部署和运行。
2、自动并行:可以自动进行模型训练的并行化处理,提高训练效率。
3、高效执行:对硬件资源的利用较为高效,能够充分发挥硬件的性能。
4、昇思框架为开发者提供了便捷、高效的开发体验,有助于推动人工智能技术的广泛应用和发展。
昇思MindSpore总体架构如下图所示:
入门学习之MINST数据集预处理
MNIST数据集是机器学习和计算机视觉领域非常著名的一个手写数字识别数据集。MNIST数据集包含60,000个训练样本和10,000个测试样本,每个样本都是一个28x28像素的灰度图像,代表一个手写的数字(0到9)。MNIST数据集常用于训练和测试图像识别算法,特别是在手写数字识别任务中。它是许多机器学习算法性能的基准。
昇思学习框架和其他深度学习库(如Python的scikit-learn、TensorFlow和PyTorch)一样,亦集成了该数据集。
- 下载minst手写数字识别数据集
from download import download
url = "https://mindspore-website.obs.cn-north-4.myhuaweicloud.com/" \
"notebook/datasets/MNIST_Data.zip"
path = download(url, "./", kind="zip", replace=True)
我们可以看到数据集下载进度及其完成情况。
数据集结构如下:
- 数据集预处理
生成数据集对象:训练集和测试集
train_dataset = MnistDataset('MNIST_Data/train')
test_dataset = MnistDataset('MNIST_Data/test')
MindSpore的dataset使用数据处理流水线,需指定map、batch、shuffle等操作。这里我们使用map对图像数据及标签进行变换处理,然后将处理好的数据集打包为大小为64的batch。
定义datapipe是一个函数,它接受两个参数:数据集和批次大小。其功能是将训练和测试数据集进行一个批次转换的操作。
def datapipe(dataset, batch_size):
image_transforms = [
vision.Rescale(1.0 / 255.0, 0),
vision.Normalize(mean=(0.1307,), std=(0.3081,)),
vision.HWC2CHW()
]
label_transform = transforms.TypeCast(mindspore.int32)
dataset = dataset.map(image_transforms, 'image')
dataset = dataset.map(label_transform, 'label')
dataset = dataset.batch(batch_size)
return dataset
训练集和测试集都使用了datapipe函数进行转换,并且每个批次包含64个数据样本。这个操作可以帮助我们在训练和测试模型时,对数据进行批次处理,提高计算的效率。
train_dataset = datapipe(train_dataset, 64)
test_dataset = datapipe(test_dataset, 64)
最后,查看数据的批量及其大小。昇思深度学习框架集成create_tuple_iterator 或create_dict_iterator函数对数据集进行迭代访问,查看数据和标签的shape和datatype。
for image, label in test_dataset.create_tuple_iterator(): #
print(f"Shape of image [N, C, H, W]: {image.shape} {image.dtype}")
print(f"Shape of label: {label.shape} {label.dtype}")
break
#或者使用create_dict_iterator()函数
for data in test_dataset.create_dict_iterator():
print(f"Shape of image [N, C, H, W]: {data['image'].shape} {data['image'].dtype}")
print(f"Shape of label: {data['label'].shape} {data['label'].dtype}")
break
其数据和标签的shape和datatype如下: