Tesnor
深度学习中涉及的数据形式一般是标量、向量、矩阵以及高维度的。标量可以理解为0维,向量是一组一维数据,矩阵是二维数据,如黑白图像,相应的,彩色图像包含了颜色通道,是一个三维数据。MindSpore提供Tensor数据结构
,来存储计算过程中使用的多维数组(n-dimensional array)。
MindSpore张量支持不同
的数据类型,包含int8、int16、int32、int64、uint8、uint16、uint32、uint64、float16、float32、float64、bool_,与NumPy的数据类型一一对应。
在MindSpore的运算处理流程中,Python中的int数会被转换为定义的int64类型,float数会被转换为定义的float32类型。
from mindspore import Tensor
data = [1,2,3,4]
x_data = Tensor(data)
x_data#Tensor(shape=[4], dtype=Int32, value= [1, 2, 3, 4])
from mindspore import Tensor
import numpy as np
data = [1,2,3,4]
np_array = np.array(data)
x_np = Tensor(np_array)
x_np#Tensor(shape=[4], dtype=Int32, value= [1, 2, 3, 4])
from mindspore import Tensor
from mindspore.common.initializer import One
tensor= mindspore.Tensor(shape=(3, 2), dtype=mindspore.float32, init=One())
tensor
from mindspore import ops
x_ones = ops.ones_like(x_data)
print(f"Ones Tensor: \n {x_ones} \n")
x_zeros = ops.zeros_like(x_data)
print(f"Zeros Tensor: \n {x_ones} \n")
张量的索引跟numpy数组一样
from mindspore import Tensor
import numpy as np
tensor = Tensor(np.array([[0, 1], [2, 3]]).astype(np.float32))
print(tensor[1])
print(tensor[0, 1])
print(tensor[:, -1])
print(tensor[..., 1])
# output
#First row: [2. 3.]
#value of bottom right corner: 2.0
#Last column: [1. 3.]
#First column: [1. 3.]
张量的属性包括形状、数据类型、转置张量、单个元素大小、占用字节数量、维数、元素个数和每一维步长。
tuple
。一个整数
。秩
,也就是len(tensor.shape),是一个整数。所有元素的个数
,是一个整数。from mindspore import Tensor
import numpy as np
x = Tensor(np.array([[1, 2], [3, 4]]))
x_shape = x.shape # 形状
x_dtype = x.dtype # 数据类型
print(x_shape)
print(x_dtype)
#output
#/(2, 2)
#Int32
张量之间有很多运算,包括算术、线性代数、矩阵处理(转置、标引、切片)、采样等,张量运算和NumPy的使用方式类似。
两个张量的合并:
from mindspore import ops
data1 = Tensor(np.array([[0, 1], [2, 3]]).astype(np.float32))
data2 = Tensor(np.array([[4, 5], [6, 7]]).astype(np.float32))
op = ops.Concat()
output = op((data1, data2))
print(output)
print("shape:\n", output.shape)
MindSpore数据加载方法根据数据的类型可以分为标准数据集,用户自定义数据集,以及MindRecord格式数据集。其中,常用标准数据集包括如MNIST、CIFAR-10、CIFAR-100、VOC、COCO、ImageNet、CelebA、CLUE
等;MindRecord是MindSpore开发的一种高效数据格式,mindspore.mindrecord
模块提供了一些方法帮助用户将不同数据集转换为MindRecord格式, 也提供了一些方法读取、写入或者检索MindRecord格式文件。
MindSpore.Dataset类提供了很多标准数据集加载的方法,如视觉图像类数据集mindspore.dataset.Cifar10Dataset
, mindspore.dataset.CocoDataset
;文本类数据集mindspore.dataset.CLUEDataset
, mindspore.dataset.IWSLT2017Dataset
; 音频类数据集mindspore.dataset.LJSpeechDataset
, mindspore.dataset.TedliumDataset
等等。
使用Mnist
数据集作为样例,mindspore.dataset
提供了大量的数据集加载接口,这里我们仍以Mnist为例,直接利用已下载好的数据集文件进行加载。mindspore.dataset提供的接口仅支持解压后的数据文件,因此我们先删除压缩文件。
import os
import mindspore.dataset as ds
import matplotlib.pyplot as plt
dataset_dir = "./data/train" # 数据集路径
# 从mnist dataset读取3张图片
mnist_dataset = ds.MnistDataset(dataset_dir=dataset_dir, num_samples=3)
# 设置图像大小
plt.figure(figsize=(8,8))
i = 1
# 打印3张子图
for dic in mnist_dataset.create_dict_iterator(output_numpy=True):
plt.subplot(3,3,i)
plt.imshow(dic['image'][:,:,0])
plt.axis('off')
i +=1
plt.show()
import mindspore.dataset as ds
data = ds.NumpySlicesDataset([1, 2, 3], column_names=["col_1"])
for x in data.create_dict_iterator():
print(x)