数据集
!pip uninstall mindspore - y
!pip install - i https: // pypi. mirrors. ustc. edu. cn/ simple mindspore== 2.2 .14
import numpy as np
from mindspore. dataset import vision
from mindspore. dataset import MnistDataset, GeneratorDataset
import matplotlib. pyplot as plt
数据集加载
以Mnist 数据集为例 mindspore.dateset
提供的接口仅支持解压后的数据文件,使用download
库下载数据集并解压。
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" , shuffle= False )
数据集迭代
def visualize ( dataset) :
figure = plt. figure( figsize= ( 4 , 4 ) )
cols, rows = 3 , 3
plt. subplots_adjust( wspace= 0.5 , hspace= 0.5 )
for idx, ( image, label) in enumerate ( dataset. create_tuple_iterator( ) ) :
figure. add_subplot( rows, cols, idx + 1 )
plt. title( int ( label) )
plt. axis( "off" )
plt. imshow( image. asnumpy( ) . squeeze( ) , cmap= "gray" )
if idx == cols * rows - 1 :
break
plt. show( )
visualize( train_dataset)
数据集常用操作
shuffle
train_dataset = train_dataset. shuffle( buffer_size= 64 )
map
针对数据集指定列添加数据变换,将数据变换应用于该列数据的每个元素,并返回包含变换后元素的新数据集image, label = next ( train_dataset. create_tuple_iterator( ) )
train_dataset = train_dataset. map ( vision. Rescale( 1.0 / 255.0 , 0 ) , input_columns= 'image' )
image, label = next ( train_dataset. create_tuple_iterator( ) )
batch - 将数据集打包成batch是在有限硬件资源下使用梯度下降进行模型优化的折中办法,可以保证梯度下降的随机性和优化计算量train_dataset = train_dataset. batch( batch_size= 32 )
image, label = next ( train_dataset. create_tuple_iterator( ) )
自定义数据集
可随机访问数据集
通过索引/键直接访问对应位置的数据样本
class RandomAccessDataset :
def __init__ ( self) :
self. _data = np. ones( ( 5 , 2 ) )
self. _label = np. zeros( ( 5 , 1 ) )
def __getitem__ ( self, index) :
return self. _data[ index] , self. _label[ index]
def __len__ ( self) :
return len ( self. _data)
可迭代数据集
通过迭代方式逐步获取数据样本。适用于随机访问成本不太高或者不可行的方案。
class IterableDataset ( ) :
def __init__ ( self, start, end) :
'''init the class object to hold the data'''
self. start = start
self. end = end
def __next__ ( self) :
'''iter one data and return'''
return next ( self. data)
def __iter__ ( self) :
'''reset the iter'''
self. data = iter ( range ( self. start, self. end) )
return self
生成器