印刷網絡商城網站建設推廣新產品最好的方法
本篇文章主要是講講MindSpore的安裝以及根據官方提供的例子實現數據變換功能。
昇思MindSpore是一款開源的AI框架,旨在實現易開發(fā)、高效執(zhí)行、全場景覆蓋三大目標。
目錄
- 1、加入MindSpore社區(qū)
- 2、安裝前準備
- 2.1、獲取安裝命令
- 2.2、安裝pip
- 2.3、確認系統(tǒng)環(huán)境
- 3、安裝MindSpore
- 3.1、完整性校驗
- 3.2、命令安裝
- 3.3、驗證安裝
- 3.4、升級版本
- 4、數據準備
- 4.1、背景
- 4.2、安裝download模塊
- 4.3、下載數據
- 5、數據變換 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、安裝前準備
2.1、獲取安裝命令
官方提供版本和環(huán)境配置信息,非常的方便,直接根據自己環(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)境已經安裝pip,若還沒有安裝,推薦如下兩種方式安裝
1)官方推薦
pip方式安裝MindSpore CPU版本-Windows
2)博客文章
可參考下面我這篇文章寫的【小5聊】Python基礎學習之python版本對應pip版本查看
2.3、確認系統(tǒng)環(huán)境
1)操作系統(tǒng)
確認安裝Windows 10是x86架構64位操作系統(tǒng)。
2)Python版本
確認安裝Python(>=3.7.5)??梢詮腜ython官網或者華為云選擇合適的版本進行安裝
3、安裝MindSpore
3.1、完整性校驗
set MS_VERSION=2.0.0a0
3.2、命令安裝
復制自己選擇的安裝命令
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、升級版本
當需要升級版本時,可執(zhí)行如下命令
pip install --upgrade mindspore=={version}
溫馨提示:升級到rc版本時,需要手動指定{version}為rc版本號,例如1.5.0rc1;如果升級到正式版本,=={version}字段可以缺省。
4、數據準備
mindspore.dataset提供了面向圖像、文本、音頻等不同數據類型的Transforms,同時也支持使用Lambda函數。
4.1、背景
通常情況下,直接加載的原始數據并不能直接送入神經網絡進行訓練,此時我們需要對其進行數據預處理。MindSpore提供不同種類的數據變換(Transforms),配合數據處理Pipeline來實現數據預處理。所有的Transforms均可通過map方法傳入,實現對指定數據列的處理。
4.2、安裝download模塊
pip install download
4.3、下載數據
根據官方提供的例子代碼,會將數據下載到根目錄
#!/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、數據變換 Transforms
5.1、Common Transforms
mindspore.dataset.transforms模塊支持一系列通用Transforms
5.1.1、Compose
Compose接收一個數據增強操作序列,然后將其組合成單個數據增強操作。我們仍基于Mnist數據集呈現Transforms的應用效果。
1)根據上一步下載好的數據,可加載并輸出,如下
#!/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)數據變換
#!/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# 先加載到數據
train_dataset = MnistDataset('MNIST_Data/train')# 設置數據變換參數
composed = transforms.Compose([vision.Rescale(1.0 / 255.0, 0),vision.Normalize(mean=(0.1307,), std=(0.3081,)),vision.HWC2CHW()]
)# 輸出數據變換后的內容
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模塊提供一系列針對圖像數據的Transforms。在Mnist數據處理過程中,使用了Rescale、Normalize和HWC2CHW變換。
5.2.1、Rescale
Rescale變換用于調整圖像像素值的大小,包括兩個參數:
rescale:縮放因子。
shift:平移因子。
1)像素值進行縮放
#!/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)數據處理
#!/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變換用于轉換圖像格式。
#!/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模塊提供一系列針對文本數據的Transforms。與圖像數據不同,文本數據需要有分詞(Tokenize)、構建詞表、Token轉Index等操作。這里簡單介紹其使用方法。
首先我們定義三段文本,作為待處理的數據,并使用GeneratorDataset進行加載。
5.3.1、BasicTokenizer
分詞(Tokenize)操作是文本數據的基礎處理方法,MindSpore提供多種不同的Tokenizer。這里我們選擇基礎的BasicTokenizer舉例。配合map,將三段文本進行分詞,可以看到處理后的數據成功分詞。
#!/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轉換為Index。在使用Lookup前,需要構造詞表,一般可以加載已有的詞表,或使用Vocab生成詞表。這里我們選擇使用Vocab.from_dataset方法從數據集中生成詞表。
#!/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函數是一種不需要名字、由一個單獨表達式組成的匿名函數,表達式會在調用時被求值。Lambda Transforms可以加載任意定義的Lambda函數,提供足夠的靈活度。在這里,我們首先使用一個簡單的Lambda函數,對輸入數據乘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()))
總結:第一次體驗MindSpore的AI框架,我感覺視野一下子就被打開了,體驗非常的棒,給MindSpore點贊,官方提供的例子也非常清晰明了!感興趣的小伙伴也可以體驗一下!