《MindSpore基礎實踐》——MindSpore基礎
1 MindSpore介紹
1.1 關于MindSpore
MindSpore是端邊云全場景按需協同的華為自研AI計算框架,提供全場景統一API,為全場景AI的模型開發、模型運行、模型部署提供端到端能力。
MindSpore采用端-邊-云按需協作分布式架構、微分原生編程新范式以及AI Native新執行模式,實現更好的資源效率、安全可信,同時降低行業AI開發門檻、釋放昇騰芯片算力,助力普惠AI。
詳情參考:MindSpore官網
1.2 MindSpore安裝
MindSpore支持Ascend、GPU、CPU,大家可以根據自己的平臺的選擇適合自己的MindSpore包,下面以Windows平臺為例進行安裝。
MindSpore是支持Windows平臺的,只不過只能以CPU的模式運行(暫時不支持Windows平臺的GPU)。如果希望嘗試MindSpore對GPU的支持,需要使用Ubuntu系列或者華為的EulerOS。
1.3 安裝Anaconda
非常推薦使用Anaconda作為Python虛擬環境的管理。
你可以去Anaconda官網下載,一路Next即可。
1.4 創建MindSpore的Python Env
目前MindSpore僅僅支持Python 3.7.5,下面創建的pyhton env就叫做mindspore:
conda create -n mindspore python=3.7.5
1.5 安裝MindSpore
我們使用pip方式進行安裝
pip install https://ms-release.obs.cn-north-4.myhuaweicloud.com/1.2.1/MindSpore/cpu/windows_x64/mindspore-1.2.1-cp37-cp37m-win_amd64.whl --trusted-host ms-release.obs.cn-north-4.myhuaweicloud.com -i https://pypi.tuna.tsinghua.edu.cn/simple
1.6 驗證是否安裝成功
python -c “import mindspore;print(mindspore.version)”
如果輸出MindSpore版本號,說明MindSpore安裝成功了,如果輸出No module named 'mindspore'說明未安裝成功。
2 MindSpore基礎
2.1 張量和數據類型
張量(Tensor)是MindSpore網絡運算中的基本數據結構。張量中的數據類型可參考dtype。
不同維度的張量分別表示不同的數據,0維張量表示標量,1維張量表示向量,2維張量表示矩陣,3維張量可以表示彩色圖像的RGB三通道等等。
MindSpore張量支持不同的數據類型,包含int8、int16、int32、int64、uint8、uint16、uint32、uint64、float16、float32、float64、bool_,與NumPy的數據類型一一對應。
在MindSpore的運算處理流程中,Python中的int數會被轉換為定義的int64類型,float數會被轉換為定義的float32類型。
步驟 1 指定MindSpore數據類型
導入MindSpore,設置Jupyter notebook的cell同時輸出多行。
# 導入MindSpore import mindspore from mindspore import dtype from mindspore import Tensor # cell同時輸出多行 from IPython.core.interactiveshell import InteractiveShell InteractiveShell.ast_node_interactivity = "all"
# 指定數據類型 a = 1 type(a) b = Tensor(a, dtype.float64) b.dtype
步驟 2 張量構造
構造張量時,支持傳入Tensor、float、int、bool、tuple、list和NumPy.array類型,其中tuple和list里只能存放float、int、bool類型數據。
Tensor初始化時,可指定dtype。如果沒有指定dtype,初始值int、float、bool分別生成數據類型為mindspore.int32、mindspore.float32、mindspore.bool_的0維Tensor, 初始值tuple和list生成的1維Tensor數據類型與tuple和list里存放的數據類型相對應,如果包含多種不同類型的數據,則按照優先級:bool < int < float,選擇相對優先級最高類型所對應的mindspore數據類型。 如果初始值是Tensor,則生成的Tensor數據類型與其一致;如果初始值是NumPy.array,則生成的Tensor數據類型與之對應。
用數組創建張量
import numpy as np from mindspore import Tensor # 用數組創建張量 x = Tensor(np.array([[1, 2], [3, 4]]), dtype.int32) x
用數值創建張量
# 用數值創建張量 y = Tensor(1.0, dtype.int32) z = Tensor(2, dtype.int32) y z
用Bool創建張量
# 用Bool創建張量 m = Tensor(True, dtype.bool_) m
用tuple創建張量
# 用tuple創建張量 n = Tensor((1, 2, 3), dtype.int16) n
用list創建張量
# 用list創建張量 p = Tensor([4.0, 5.0, 6.0], dtype.float64) p
用常量創建張量
# 用常量創建張量 q = Tensor(1, dtype.float64) q
步驟 3 張量的屬性
張量的屬性包括形狀(shape)和數據類型(dtype)。
形狀:Tensor的shape,是一個tuple。
數據類型:Tensor的dtype,是MindSpore的一個數據類型。
x = Tensor(np.array([[1, 2], [3, 4]]), dtype.int32) x_shape = x.shape # 形狀 x_dtype = x.dtype # 數據類型 x_shape x_dtype
x = Tensor(np.array([[1, 2], [3, 4]]), dtype.int32) x.shape # 形狀 x.dtype # 數據類型 x.ndim # 維度 x.size # 大小
步驟 4 張量的方法
asnumpy():將Tensor轉換為NumPy的array。
y = Tensor(np.array([[True, True], [False, False]]), dtype.bool_) # 將Tensor數據類型轉換成NumPy y_array = y.asnumpy() y y_array
2.2 數據集加載
MindSpore.dataset提供API來加載和處理各種常見的數據集,如MNIST, CIFAR-10, CIFAR-100, VOC, ImageNet, CelebA等。
步驟 1 加載MNIST數據集
mindspore.dataset.MnistDataset
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()
MindSpore還支持加載多種數據存儲格式下的數據集,用戶可以直接使用mindspore.dataset中對應的類加載磁盤中的數據文件。
步驟 2 加載NumPy數據集
mindspore.dataset.NumpySlicesDataset
import mindspore.dataset as ds data = ds.NumpySlicesDataset([1, 2, 3], column_names=["col_1"]) for x in data.create_dict_iterator(): print(x)
3 參考資料
https://gitee.com/mindspore/mindspore
https://github.com/mindspore-ai/mindspore
MindSpore
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。