import mindspore
from mindspore import nn
from mindspore.dataset import vision,transforms
from midspore.dataset import MnistDataset
下载mindspore需要python3.7-3.9
由于博主以前的python版本是3.12,故博主用的是conda去创建虚拟环境,更改python版本后下载。
查看自己python版本做法
python --version
conda create -n mindspore_env python=3.8
conda activate mindspore_env
进入到mindspore_env环境后,使用CPU的下载方式
conda install mindspore-cpu -c mindspore
加载数据集需要用到的依赖:download,使用download能解压数据集,因为mindspore.dataset只支持解压后的文件
pip install download
本小白博主将基于手写识别项目开展下面的代码(基于华为mindspore训练营资料~):
import mindspore
from mindspore import nn
from mindspore.dataset import vision,transforms
from mnidspore.dataset import MnistDataset
(插播一句~推荐使用vscode配合jupternotebook进行学习~)
#加载数据集
from download import download
url="/对应的路径"
path=download(url,"/",kind="zip",replace=True)
运行的截图如下~~~~~~~~~~
定义测试集和训练集:
train_dataset
text_dataset
train_dataset=MnistDataset('MNIST_Data/train')
text_dataset=MnistDataset('MNIST_Data/test')
打印列名用 get_col_names()
print(train_dataset.get_col_names())
MinsSpore 的dataset是使用数据处理流水线进行处理的,需要指定map,batch,shuffle等操作。使用map对图像数据和标签进行变换处理,将处理好的数据集打包为64的batch。
rescale
normalsize
def datapipe(dataset,batch_size):
image_transforms=[
vision.Rescale(1.0/255.0,0),
#Rescale:原始图片中,每个像素的灰度值在0-255之间,需要通过`Rescale`将数值变为0-1之间;
vision.Normalize(mean=(0.1307,),std=(0.3081,)),
#Normalize:按照mean=0.1307,std=0.3081,通过`Normalize`对数据进行归一化;
vision.HWC2CHW()
]
#将数据改为32位的形式
label_transform=transforms.TypeCast(mindspore.int32)
标签变换处理,用map~。map的第一个参数是处理函数列表,第二个参数表示需要处理的列
dataset=dataset.map(image_transforms,'image')
dataset=dataset.map(label_transforms,'image')
dataset=dataset.batch(batch_size)
return dataset
运行的截图如下~~~~~~~~~~
关于张量~
张量:
引用自其他博主:
“张量(tensor)是多维数组,目的是把向量、矩阵推向更高的维度。
有n维度就叫做n维张量”
是一个可用来表示在一些矢量、标量和其他张量之间线性关系的多线性函数,这些线性关系的基本例子有内积、外积、线性变换等。其中的每一个分量都是坐标的函数,而在坐标变换的时候,这些分量也依照某些规则做线性变换。
张量是一种特殊的数据结构,类似于数组和矩阵。
import numpy as np
import mindspore
from mindspore import ops
from mindspore import Tensor,CSRTensor,COOTensor
创建张量:
1.根据数据直接创造张量
data=[1,1,1,0,5]
x_data=Tensor(data)
print(x_data,x_data.shape,x_data.dtype)
运行的截图如下~~~~~~~~~~
2.从NumPy数组直接创造张量
data=[1,9,1,0,5]
np_array=np.array(data)
x_np=Tensor(np_array)
print(x_np,x_np.shape,x_np.dtype)
运行的截图如下~~~~~~~~~~
用init的方式去创建张量
from mindspore.common.initializer import One,Normal
tensor1=mindspore.Tensor(shape=(2,2),dtype=mindspore.float32,init=One())
tensor1=mindspore.Tensor(shape=(2,2),dtype=mindspore.float32,init=Normal())
print("tensor1:\n",tensor1)
print("tensor2:\n",tensor2)
继承张量
from mindspore import ops
from mindspore import Tensor
data=[1,2,2,3,8]
x_data=Tensor(data)
x_ones=ops.ones_like(x_data)
x_zeros=ops.zeros_like(x_data)
print(f"one tensor{x_ones}\n")
print(f"one tensor{x_zeros}\n")
继承的是x_data张量的性质
输出的结果: