Window10 上MindSpore(CPU)用LeNet網(wǎng)絡(luò)訓(xùn)練MNIST

本文是在windows10上安裝了CPU版本的Mindspore,并在mindspore的master分支基礎(chǔ)上使用LeNet網(wǎng)絡(luò)訓(xùn)練MNIST數(shù)據(jù)集,實(shí)踐已訓(xùn)練成功,此文為記錄過程中的出現(xiàn)問題;
(據(jù)說此時(shí)mindspore的r0.7版本上是直接執(zhí)行成功的)

【1】首先使用conda activate mindspore 進(jìn)入mindspore虛擬環(huán)境

【2】再切入mindspore中l(wèi)enet網(wǎng)絡(luò)的train.py所在目錄 D:\gitee\mindspore\model_zoo\official\cv\lenet

mindspore的lenet網(wǎng)絡(luò)訓(xùn)練文件所在位置

【3】執(zhí)行訓(xùn)練 python train.py --device-target=CPU (因?yàn)榇a里默認(rèn)使用的訓(xùn)練設(shè)備為Ascend,需要手動(dòng)設(shè)置 --device_targetCPU

  • 問題一 No module named 'mindspore.dataset.vision’
No module named mindspore.dataset.vision

報(bào)錯(cuò):文件 D:\gitee\mindspore\model_zoo\official\cv\lenet\src\dataset.py 引入模塊import mindspore.dataset.version.c_transforms as CV 錯(cuò)誤;

原因:查看發(fā)現(xiàn)系統(tǒng) miniconda3的mindspore環(huán)境中 在\dataset 和 \version文件夾中還有一層 \transforms

dataset和version中還有一層transform層

解決:修改dataset.py 文件中模塊引用的位置;

import mindspore.dataset.transforms.vision.c_transforms as CV
from mindspore.dataset.transforms.vision import Inter

保存文件重新執(zhí)行命令 python train.py --device-target=CPU

  • 問題二 ImportError: cannot import name ‘set_seed’ from 'mindspore.common’
bug4.png

報(bào)錯(cuò):文件train.py中導(dǎo)入set_seed模塊出錯(cuò)

原因: C:\Users\86183\miniconda3\envs\mindspore\Lib\site-packages\mindspore\common\__init__.py 文件中沒有set_seed模塊(也即common文件下沒有set_seed.py文件)

解決:在train.py 中將以下兩條語句注釋掉

from mindspore.common import set_seed

set_seed(1)

保存文件重新執(zhí)行命令 python train.py --device-target=CPU

  • 問題三 ValueError: The folder ./Data\train does not exist or permission denied!
ValueError: The folder ./Data\train does not exist or permission denied!

原因:/Data/train 文件不存在

解決:在D:\gitee\mindspore\model_zoo\official\cv\lenet\ 下新建Data目錄,并在Data目錄下新建train和test文件夾

新建data\train

重新執(zhí)行命令 python train.py --device-target=CPU

  • 問題四 RuntimeError: Currently dateset sink mode is not supported when the device target is CPU
RuntimeError: Currently dateset sink mode is not supported when the device target is CPU

原因:數(shù)據(jù)下沉模式是針對(duì)asic芯片做的優(yōu)化 默認(rèn)是開啟的,CPU不支持這種模式

解決:改為執(zhí)行命令 python train.py --device_target=CPU --dataset_sink_mode=False

  • 問題五: Unexpected error. There is no valid data matching the dataset API MnistDataset.Please check file path or dataset API validation first.
Unexpected error. There is no valid data matching the dataset API MnistDataset.Please check file path or dataset API validation first.

原因:腳本沒有自動(dòng)下載MNIST數(shù)據(jù)集,需要自己手動(dòng)下載

解決:手動(dòng)下載MNIST數(shù)據(jù)集MNIST數(shù)據(jù)集下載地址

MNIST數(shù)據(jù)目錄結(jié)構(gòu):


MNIST數(shù)據(jù)目錄結(jié)構(gòu)

t10k-labels-idx1-ubyte.gzt10k-images-idx3-ubyte.gz 解壓到 問題三新建的Data/test 目錄下
train-labels-idx1-ubyte.gztrain-images-idx3-ubyte.gz 解壓到 問題三新建的Data/test 目錄下

data/train
data/test

重新執(zhí)行python train.py --device_target=CPU --dataset_sink_mode=False

  • 問題六 InferImplBiasAddGrad] BiasAddGrad input y backprop, dim should >= 2, while 1.
InferImplBiasAddGrad BiasAddGrad input y backprop, dim should 2, while 1.

解決:在train.py中添加語句 is_grad=False, 變成下面這樣

    net_loss = nn.SoftmaxCrossEntropyWithLogits(sparse=True, reduction="mean",is_grad=False)

再度執(zhí)行命令 python train.py --device_target=CPU --dataset_sink_mode=False , 訓(xùn)練成功;

訓(xùn)練10個(gè)epoch

【4】驗(yàn)證準(zhǔn)確率: python eval.py --ckpt_path="ckpt/checkpoint_lenet-10_1875.ckpt" --device_target=CPU

============== Starting Testing ==============
============== {'Accuracy': 0.9844751602564102} ==============

訓(xùn)練10個(gè)epoch的準(zhǔn)確性為98.45%,還是可以的;

驗(yàn)證.png
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容