本文是在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í)行成功的)
- Windows10
- Miniconda 4.8.3
- Python 3.7.7
- MindSpore master mindspore的gitee地址
【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
【3】執(zhí)行訓(xùn)練 python train.py --device-target=CPU (因?yàn)榇a里默認(rèn)使用的訓(xùn)練設(shè)備為Ascend,需要手動(dòng)設(shè)置 --device_target為CPU)
- 問題一 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.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’

報(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!
原因:/Data/train 文件不存在
解決:在D:\gitee\mindspore\model_zoo\official\cv\lenet\ 下新建Data目錄,并在Data目錄下新建train和test文件夾

重新執(zhí)行命令 python train.py --device-target=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.
原因:腳本沒有自動(dòng)下載MNIST數(shù)據(jù)集,需要自己手動(dòng)下載
解決:手動(dòng)下載MNIST數(shù)據(jù)集MNIST數(shù)據(jù)集下載地址
MNIST數(shù)據(jù)目錄結(jié)構(gòu):

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


重新執(zhí)行python train.py --device_target=CPU --dataset_sink_mode=False
- 問題六 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)練成功;
【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%,還是可以的;
