微吼云上線多路互動直播服務 加速多場景互動直播落地
589
2025-04-05
一、前言
2020年3月28日,MindSpore正式開源,備受廣大開發者的關注。從4月30日發布的v0.2.0-alpha版本,到8月30日發布的v0.7.0-beta版本,推出了數十個亮眼的新特性,9月,在華為全聯接大會上,MindSpore正式發布v1.0.0版本。
有關Mindspore 1.0更多的介紹可以看這一篇文章:https://www.mindspore.cn/news/newschildren?id=262
二、Mindspore 1.0安裝
Mindspore安裝教程參考文檔:https://www.mindspore.cn/install
這邊有個小建議:國內通過pip install 安裝的用戶可以在教程頁面給出的安裝命令的最后加上 -i https://mirrors.huaweicloud.com/repository/pypi/simple?命令使用國內源。因為在安裝mindspore的時候會安裝一些依賴包,這些依賴包沒制定過安裝源的話他會從國外的默認地址下載,那樣的話在國內下載可能比較慢。所有建議加上-i 指定一下國內源。
如果想要使用docker安裝的話可以參考這個文檔:https://gitee.com/mindspore/mindspore?中的Docer鏡像部分安裝。
安裝環境
硬件環境:
CPU:Intel i7-4712MQ
內存:8G
顯卡:Nvidia GeForce 840M
軟件環境:
操作系統:WIN10 2004
Python:Python 3.7.7
根據官方安裝教程安裝完畢后,在命令提示符輸入python,然后輸入代碼,執行結果顯示1.0.0說明Mindspore 1.0.0安裝成功了。
import?mindspore?as?ms ms.__version__
三、使用Lenet+Mnist初體驗
1.Lenet介紹
LeNet-5是一個較簡單的卷積神經網絡。下圖顯示了其結構:輸入的二維圖像,先經過兩次卷積層到池化層,再經過全連接層,最后使用softmax分類作為輸出層。
LeNet-5 這個網絡雖然很小,但是它包含了深度學習的基本模塊:卷積層,池化層,全連接層。是其他深度學習模型的基礎, 這里我們對LeNet-5進行深入分析。同時,通過實例分析,加深對與卷積層和池化層的理解。
2.MNIST數據集介紹
MNIST 數據集已經是一個被”嚼爛”了的數據集, 很多教程都會對它”下手”, 幾乎成為一個 “典范”. 不過有些人可能對它還不是很了解, 下面來介紹一下.
MNIST 數據集可在http://yann.lecun.com/exdb/mnist/獲取, 它包含了四個部分:
訓練集:
Training set images: train-images-idx3-ubyte.gz (9.9 MB, 解壓后 47 MB, 包含 60,000 個樣本)
Training set labels: train-labels-idx1-ubyte.gz (29 KB, 解壓后 60 KB, 包含 60,000 個標簽)
測試集
Test set images: t10k-images-idx3-ubyte.gz (1.6 MB, 解壓后 7.8 MB, 包含 10,000 個樣本)
Test set labels: t10k-labels-idx1-ubyte.gz (5KB, 解壓后 10 KB, 包含 10,000 個標簽)
MNIST 數據集來自美國國家標準與技術研究所, National Institute of Standards and Technology (NIST). 訓練集 (training set) 由來自 250 個不同人手寫的數字構成, 其中 50% 是高中學生, 50% 來自人口普查局 (the Census Bureau) 的工作人員. 測試集(test set) 也是同樣比例的手寫數字數據.
3.Lenet+MNIST代碼
程序運行代碼可以參考Mindspore官方代碼倉:https://gitee.com/mindspore/mindspore/tree/r1.0/model_zoo/official/cv/lenet
第一步:將代碼下載下來拷貝到本地,代碼的文件夾結構如下
lenet
|___src
|? ? ? ?|__config.py
|? ? ? ?|__dataset.py
|? ? ? ?|__lenet.py
|
|___MNIST_DATA
|? ? ? ?|______train(MNIST下載后的訓練集解壓到這個目錄
|? ? ? ?|______test(MNIST下載后的驗證集解壓到這個目錄
|
|____train.py? ?訓練代碼
|____eval.py? ? 測試代碼
train.py的代碼:
#?Copyright?2020?Huawei?Technologies?Co.,?Ltd # #?Licensed?under?the?Apache?License,?Version?2.0?(the?"License"); #?you?may?not?use?this?file?except?in?compliance?with?the?License. #?You?may?obtain?a?copy?of?the?License?at # #?http://www.apache.org/licenses/LICENSE-2.0 # #?Unless?required?by?applicable?law?or?agreed?to?in?writing,?software #?distributed?under?the?License?is?distributed?on?an?"AS?IS"?BASIS, #?WITHOUT?WARRANTIES?OR?CONDITIONS?OF?ANY?KIND,?either?express?or?implied. #?See?the?License?for?the?specific?language?governing?permissions?and #?limitations?under?the?License. #?============================================================================ """ ########################?train?lenet?example?######################## train?lenet?and?get?network?model?files(.ckpt)?: python?train.py?--data_path?/YourDataPath """ import?os import?ast import?argparse from?src.config?import?mnist_cfg?as?cfg from?src.dataset?import?create_dataset from?src.lenet?import?LeNet5 import?mindspore.nn?as?nn from?mindspore?import?context from?mindspore.train.callback?import?ModelCheckpoint,?CheckpointConfig,?LossMonitor,?TimeMonitor from?mindspore.train?import?Model from?mindspore.nn.metrics?import?Accuracy from?mindspore.common?import?set_seed set_seed(1) if?__name__?==?"__main__": ????parser?=?argparse.ArgumentParser(description='MindSpore?Lenet?Example') ????parser.add_argument('--device_target',?type=str,?default="CPU",?choices=['Ascend',?'GPU',?'CPU'], ????????????????????????help='device?where?the?code?will?be?implemented?(default:?Ascend)') ????parser.add_argument('--data_path',?type=str,?default="./Data", ????????????????????????help='path?where?the?dataset?is?saved') ????parser.add_argument('--ckpt_path',?type=str,?default="./ckpt",?help='if?is?test,?must?provide\ ????????????????????????path?where?the?trained?ckpt?file') ????parser.add_argument('--dataset_sink_mode',?type=ast.literal_eval,?default=True, ????????????????????????help='dataset_sink_mode?is?False?or?True') ????args?=?parser.parse_args() ????context.set_context(mode=context.GRAPH_MODE,?device_target=args.device_target) ????ds_train?=?create_dataset(os.path.join(args.data_path,?"train"), ??????????????????????????????cfg.batch_size) ????network?=?LeNet5(cfg.num_classes) ????net_loss?=?nn.SoftmaxCrossEntropyWithLogits(sparse=True,?reduction="mean") ????net_opt?=?nn.Momentum(network.trainable_params(),?cfg.lr,?cfg.momentum) ????time_cb?=?TimeMonitor(data_size=ds_train.get_dataset_size()) ????config_ck?=?CheckpointConfig(save_checkpoint_steps=cfg.save_checkpoint_steps, ?????????????????????????????????keep_checkpoint_max=cfg.keep_checkpoint_max) ????ckpoint_cb?=?ModelCheckpoint(prefix="checkpoint_lenet",?directory=args.ckpt_path,?config=config_ck) ????model?=?Model(network,?net_loss,?net_opt,?metrics={"Accuracy":?Accuracy()}) ????print("==============?Starting?Training?==============") ????model.train(cfg['epoch_size'],?ds_train,?callbacks=[time_cb,?ckpoint_cb,?LossMonitor()], ????????????????dataset_sink_mode=args.dataset_sink_mode)
eval.py的代碼:
#?Copyright?2020?Huawei?Technologies?Co.,?Ltd # #?Licensed?under?the?Apache?License,?Version?2.0?(the?"License"); #?you?may?not?use?this?file?except?in?compliance?with?the?License. #?You?may?obtain?a?copy?of?the?License?at # #?http://www.apache.org/licenses/LICENSE-2.0 # #?Unless?required?by?applicable?law?or?agreed?to?in?writing,?software #?distributed?under?the?License?is?distributed?on?an?"AS?IS"?BASIS, #?WITHOUT?WARRANTIES?OR?CONDITIONS?OF?ANY?KIND,?either?express?or?implied. #?See?the?License?for?the?specific?language?governing?permissions?and #?limitations?under?the?License. #?============================================================================ """ ########################?eval?lenet?example?######################## eval?lenet?according?to?model?file: python?eval.py?--data_path?/YourDataPath?--ckpt_path?Your.ckpt """ import?os import?ast import?argparse import?mindspore.nn?as?nn from?mindspore?import?context from?mindspore.train.serialization?import?load_checkpoint,?load_param_into_net from?mindspore.train?import?Model from?mindspore.nn.metrics?import?Accuracy from?src.dataset?import?create_dataset from?src.config?import?mnist_cfg?as?cfg from?src.lenet?import?LeNet5 if?__name__?==?"__main__": ????parser?=?argparse.ArgumentParser(description='MindSpore?Lenet?Example') ????parser.add_argument('--device_target',?type=str,?default="CPU",?choices=['Ascend',?'GPU',?'CPU'], ????????????????????????help='device?where?the?code?will?be?implemented?(default:?Ascend)') ????parser.add_argument('--data_path',?type=str,?default="./MNIST_Data", ????????????????????????help='path?where?the?dataset?is?saved') ????parser.add_argument('--ckpt_path',?type=str,?default="",?help='if?mode?is?test,?must?provide\ ????????????????????????path?where?the?trained?ckpt?file') ????parser.add_argument('--dataset_sink_mode',?type=ast.literal_eval, ????????????????????????default=False,?help='dataset_sink_mode?is?False?or?True') ????args?=?parser.parse_args() ????context.set_context(mode=context.GRAPH_MODE,?device_target=args.device_target) ????network?=?LeNet5(cfg.num_classes) ????net_loss?=?nn.SoftmaxCrossEntropyWithLogits(sparse=True,?reduction="mean") ????repeat_size?=?cfg.epoch_size ????net_opt?=?nn.Momentum(network.trainable_params(),?cfg.lr,?cfg.momentum) ????model?=?Model(network,?net_loss,?net_opt,?metrics={"Accuracy":?Accuracy()}) ????print("==============?Starting?Testing?==============") ????param_dict?=?load_checkpoint(args.ckpt_path) ????load_param_into_net(network,?param_dict) ????ds_eval?=?create_dataset(os.path.join(args.data_path,?"test"), ?????????????????????????????cfg.batch_size, ?????????????????????????????1) ????acc?=?model.eval(ds_eval,?dataset_sink_mode=args.dataset_sink_mode) ????print("==============?{}?==============".format(acc))
src目錄下config.py(用來設置運行參數的文件)
from?easydict?import?EasyDict?as?edict mnist_cfg?=?edict({ ????'num_classes':?10, ????'lr':?0.01, ????'momentum':?0.9, ????'epoch_size':?10, ????'batch_size':?32, ????'buffer_size':?1000, ????'image_height':?32, ????'image_width':?32, ????'save_checkpoint_steps':?1875, ????'keep_checkpoint_max':?10, })
第二步:執行train.py開始訓練模型的
命令:python train.py
執行結果:
看到出現Epoch time:和per step time且屏幕不再滾動就說明訓練已經完成。訓練完成后我們可以發現代碼目錄下生成了一個新的文件夾叫CKPT,這個文件夾內存放的就是訓練后的ckpt文件,在后面的驗證代碼中會用到這個里面的文件
第三步:執行驗證代碼test.py
命令:python eval.py --ckpt_path=./ckpt/checkpoint_lenet-10_1875.ckpt
說明:--ckpt_path 參數指定ckpt文件路徑。這里我們選擇前面訓練產生的最后一個ckpt,也就是checkpoint_lenet-10_1875.ckpt
執行結果:
看到命令行中出現'Accuracy'的結果后,就說明代碼運行成功了,可以看到這次模型訓練的進度為98.4375%還算可以。
四、總結
Lenet+MNIST的模型訓練在我看來可以算是Mindspore的Hello world了,執行起來難度不是很大,整個的運行時間也不會很久。這次的模型訓練是在CPU環境下運行的,等后面有機會裝一個GPU版本,跑一個resnet50+Cifar10看看效果有沒有比前幾個版本的運行速度快一點。當然更多的算法實例可以參考Mindspore官方碼云下的Model_Zoo,里面還有不少好玩的算法代碼。有興趣的可以去試著跑跑看,代碼地址:https://gitee.com/mindspore/mindspore/tree/r1.0/model_zoo
AI
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。