印刷網(wǎng)絡(luò)商城網(wǎng)站建設(shè)推廣新產(chǎn)品最好的方法
本篇文章主要是講講MindSpore的安裝以及根據(jù)官方提供的例子實現(xiàn)數(shù)據(jù)變換功能。
昇思MindSpore是一款開源的AI框架,旨在實現(xiàn)易開發(fā)、高效執(zhí)行、全場景覆蓋三大目標(biāo)。
目錄
- 1、加入MindSpore社區(qū)
- 2、安裝前準(zhǔn)備
- 2.1、獲取安裝命令
- 2.2、安裝pip
- 2.3、確認(rèn)系統(tǒng)環(huán)境
- 3、安裝MindSpore
- 3.1、完整性校驗
- 3.2、命令安裝
- 3.3、驗證安裝
- 3.4、升級版本
- 4、數(shù)據(jù)準(zhǔn)備
- 4.1、背景
- 4.2、安裝download模塊
- 4.3、下載數(shù)據(jù)
- 5、數(shù)據(jù)變換 Transforms
- 5.1、Common Transforms
- 5.1.1、Compose
- 5.2、Vision Transforms
- 5.2.1、Rescale
- 5.2.2、Normalize
- 5.2.3、HWC2CWH
- 5.3、Text Transforms
- 5.3.1、BasicTokenizer
- 5.3.2、Lookup
- 5.4、Lambda Transforms
1、加入MindSpore社區(qū)
2、安裝前準(zhǔn)備
2.1、獲取安裝命令
官方提供版本和環(huán)境配置信息,非常的方便,直接根據(jù)自己環(huán)境選擇即可
pip install https://ms-release.obs.cn-north-4.myhuaweicloud.com/2.0.0a0/MindSpore/cpu/x86_64/mindspore-2.0.0a0-cp39-cp39-win_amd64.whl --trusted-host ms-release.obs.cn-north-4.myhuaweicloud.com -i https://pypi.tuna.tsinghua.edu.cn/simple
# 注意參考下方安裝指南,添加運行所需的環(huán)境變量配置
2.2、安裝pip
確保自己環(huán)境已經(jīng)安裝pip,若還沒有安裝,推薦如下兩種方式安裝
1)官方推薦
pip方式安裝MindSpore CPU版本-Windows
2)博客文章
可參考下面我這篇文章寫的【小5聊】Python基礎(chǔ)學(xué)習(xí)之python版本對應(yīng)pip版本查看
2.3、確認(rèn)系統(tǒng)環(huán)境
1)操作系統(tǒng)
確認(rèn)安裝Windows 10是x86架構(gòu)64位操作系統(tǒng)。
2)Python版本
確認(rèn)安裝Python(>=3.7.5)??梢詮腜ython官網(wǎng)或者華為云選擇合適的版本進(jìn)行安裝
3、安裝MindSpore
3.1、完整性校驗
set MS_VERSION=2.0.0a0
3.2、命令安裝
復(fù)制自己選擇的安裝命令
pip install https://ms-release.obs.cn-north-4.myhuaweicloud.com/2.0.0a0/MindSpore/cpu/x86_64/mindspore-2.0.0a0-cp39-cp39-win_amd64.whl --trusted-host ms-release.obs.cn-north-4.myhuaweicloud.com -i https://pypi.tuna.tsinghua.edu.cn/simple
以下為安裝過程
3.3、驗證安裝
python -c "import mindspore;mindspore.run_check()"
3.4、升級版本
當(dāng)需要升級版本時,可執(zhí)行如下命令
pip install --upgrade mindspore=={version}
溫馨提示:升級到rc版本時,需要手動指定{version}為rc版本號,例如1.5.0rc1;如果升級到正式版本,=={version}字段可以缺省。
4、數(shù)據(jù)準(zhǔn)備
mindspore.dataset提供了面向圖像、文本、音頻等不同數(shù)據(jù)類型的Transforms,同時也支持使用Lambda函數(shù)。
4.1、背景
通常情況下,直接加載的原始數(shù)據(jù)并不能直接送入神經(jīng)網(wǎng)絡(luò)進(jìn)行訓(xùn)練,此時我們需要對其進(jìn)行數(shù)據(jù)預(yù)處理。MindSpore提供不同種類的數(shù)據(jù)變換(Transforms),配合數(shù)據(jù)處理Pipeline來實現(xiàn)數(shù)據(jù)預(yù)處理。所有的Transforms均可通過map方法傳入,實現(xiàn)對指定數(shù)據(jù)列的處理。
4.2、安裝download模塊
pip install download
4.3、下載數(shù)據(jù)
根據(jù)官方提供的例子代碼,會將數(shù)據(jù)下載到根目錄
#!/usr/bin/python3
# -*- coding: utf-8 -*-
# 2023-02-25import numpy as np
from PIL import Image
from download import download
from mindspore.dataset import transforms, vision, text
from mindspore.dataset import GeneratorDataset, MnistDataset# Download data from open datasetsurl = "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')
5、數(shù)據(jù)變換 Transforms
5.1、Common Transforms
mindspore.dataset.transforms模塊支持一系列通用Transforms
5.1.1、Compose
Compose接收一個數(shù)據(jù)增強操作序列,然后將其組合成單個數(shù)據(jù)增強操作。我們?nèi)曰贛nist數(shù)據(jù)集呈現(xiàn)Transforms的應(yīng)用效果。
1)根據(jù)上一步下載好的數(shù)據(jù),可加載并輸出,如下
#!/usr/bin/python3
# -*- coding: utf-8 -*-
# 2023-02-25import numpy as np
from PIL import Image
from download import download
from mindspore.dataset import transforms, vision, text
from mindspore.dataset import GeneratorDataset, MnistDatasettrain_dataset = MnistDataset('MNIST_Data/train')
image, label = next(train_dataset.create_tuple_iterator())
print(image.shape)
2)數(shù)據(jù)變換
#!/usr/bin/python3
# -*- coding: utf-8 -*-
# 2023-02-25import numpy as np
from PIL import Image
from download import download
from mindspore.dataset import transforms, vision, text
from mindspore.dataset import GeneratorDataset, MnistDataset# 先加載到數(shù)據(jù)
train_dataset = MnistDataset('MNIST_Data/train')# 設(shè)置數(shù)據(jù)變換參數(shù)
composed = transforms.Compose([vision.Rescale(1.0 / 255.0, 0),vision.Normalize(mean=(0.1307,), std=(0.3081,)),vision.HWC2CHW()]
)# 輸出數(shù)據(jù)變換后的內(nèi)容
train_dataset = train_dataset.map(composed, 'image')
image, label = next(train_dataset.create_tuple_iterator())
print(image.shape)
5.2、Vision Transforms
mindspore.dataset.vision模塊提供一系列針對圖像數(shù)據(jù)的Transforms。在Mnist數(shù)據(jù)處理過程中,使用了Rescale、Normalize和HWC2CHW變換。
5.2.1、Rescale
Rescale變換用于調(diào)整圖像像素值的大小,包括兩個參數(shù):
rescale:縮放因子。
shift:平移因子。
1)像素值進(jìn)行縮放
#!/usr/bin/python3
# -*- coding: utf-8 -*-
# 2023-02-25import numpy as np
from PIL import Image
from download import download
from mindspore.dataset import transforms, vision, text
from mindspore.dataset import GeneratorDataset, MnistDatasetrandom_np = np.random.randint(0, 255, (48, 48), np.uint8)
random_image = Image.fromarray(random_np)
print(random_np)
2)數(shù)據(jù)處理
#!/usr/bin/python3
# -*- coding: utf-8 -*-
# 2023-02-25import numpy as np
from PIL import Image
from download import download
from mindspore.dataset import transforms, vision, text
from mindspore.dataset import GeneratorDataset, MnistDatasetrandom_np = np.random.randint(0, 255, (48, 48), np.uint8)
random_image = Image.fromarray(random_np)rescale = vision.Rescale(1.0 / 255.0, 0)
rescaled_image = rescale(random_image)
print(rescaled_image)
5.2.2、Normalize
Normalize變換用于對輸入圖像的歸一化
#!/usr/bin/python3
# -*- coding: utf-8 -*-
# 2023-02-25import numpy as np
from PIL import Image
from download import download
from mindspore.dataset import transforms, vision, text
from mindspore.dataset import GeneratorDataset, MnistDatasetrandom_np = np.random.randint(0, 255, (48, 48), np.uint8)
random_image = Image.fromarray(random_np)rescale = vision.Rescale(1.0 / 255.0, 0)
rescaled_image = rescale(random_image)normalize = vision.Normalize(mean=(0.1307,), std=(0.3081,))
normalized_image = normalize(rescaled_image)
print(normalized_image)
5.2.3、HWC2CWH
HWC2CWH變換用于轉(zhuǎn)換圖像格式。
#!/usr/bin/python3
# -*- coding: utf-8 -*-
# 2023-02-25import numpy as np
from PIL import Image
from download import download
from mindspore.dataset import transforms, vision, text
from mindspore.dataset import GeneratorDataset, MnistDatasetrandom_np = np.random.randint(0, 255, (48, 48), np.uint8)
random_image = Image.fromarray(random_np)rescale = vision.Rescale(1.0 / 255.0, 0)
rescaled_image = rescale(random_image)normalize = vision.Normalize(mean=(0.1307,), std=(0.3081,))
normalized_image = normalize(rescaled_image)hwc_image = np.expand_dims(normalized_image, -1)
hwc2cwh = vision.HWC2CHW()
chw_image = hwc2cwh(hwc_image)
print(hwc_image.shape, chw_image.shape)
5.3、Text Transforms
mindspore.dataset.text模塊提供一系列針對文本數(shù)據(jù)的Transforms。與圖像數(shù)據(jù)不同,文本數(shù)據(jù)需要有分詞(Tokenize)、構(gòu)建詞表、Token轉(zhuǎn)Index等操作。這里簡單介紹其使用方法。
首先我們定義三段文本,作為待處理的數(shù)據(jù),并使用GeneratorDataset進(jìn)行加載。
5.3.1、BasicTokenizer
分詞(Tokenize)操作是文本數(shù)據(jù)的基礎(chǔ)處理方法,MindSpore提供多種不同的Tokenizer。這里我們選擇基礎(chǔ)的BasicTokenizer舉例。配合map,將三段文本進(jìn)行分詞,可以看到處理后的數(shù)據(jù)成功分詞。
#!/usr/bin/python3
# -*- coding: utf-8 -*-
# 2023-02-25import numpy as np
from PIL import Image
from download import download
from mindspore.dataset import transforms, vision, text
from mindspore.dataset import GeneratorDataset, MnistDatasettexts = ['Welcome to Beijing','北京歡迎您!','我喜歡China!',
]test_dataset = GeneratorDataset(texts, 'text')
fdfds=text.BasicTokenizer()
test_dataset = test_dataset.map(text.BasicTokenizer())
報錯原因:BasicTokenizer接口不支持windows平臺
5.3.2、Lookup
Lookup為詞表映射變換,用來將Token轉(zhuǎn)換為Index。在使用Lookup前,需要構(gòu)造詞表,一般可以加載已有的詞表,或使用Vocab生成詞表。這里我們選擇使用Vocab.from_dataset方法從數(shù)據(jù)集中生成詞表。
#!/usr/bin/python3
# -*- coding: utf-8 -*-
# 2023-02-25import numpy as np
from PIL import Image
from download import download
from mindspore.dataset import transforms, vision, text
from mindspore.dataset import GeneratorDataset, MnistDatasettexts = ['Welcome to Beijing','北京歡迎您!','我喜歡China!',
]test_dataset = GeneratorDataset(texts, 'text')
vocab = text.Vocab.from_dataset(test_dataset)
print(vocab.vocab())
5.4、Lambda Transforms
Lambda函數(shù)是一種不需要名字、由一個單獨表達(dá)式組成的匿名函數(shù),表達(dá)式會在調(diào)用時被求值。Lambda Transforms可以加載任意定義的Lambda函數(shù),提供足夠的靈活度。在這里,我們首先使用一個簡單的Lambda函數(shù),對輸入數(shù)據(jù)乘2
#!/usr/bin/python3
# -*- coding: utf-8 -*-
# 2023-02-25import numpy as np
from PIL import Image
from download import download
from mindspore.dataset import transforms, vision, text
from mindspore.dataset import GeneratorDataset, MnistDatasettest_dataset = GeneratorDataset([1, 2, 3], 'data', shuffle=False)
test_dataset = test_dataset.map(lambda x: x * 2)
print(list(test_dataset.create_tuple_iterator()))
總結(jié):第一次體驗MindSpore的AI框架,我感覺視野一下子就被打開了,體驗非常的棒,給MindSpore點贊,官方提供的例子也非常清晰明了!感興趣的小伙伴也可以體驗一下!