本文是在windows10上安裝了CPU版本的Mindspore,並在mindspore的master分支基礎上使用LeNet網絡訓練MNIST數據集,實踐已訓練成功,此文為記錄過程中的出現問題;
(據說此時mindspore的r0.7版本上是直接執行成功的)
- Windows10
- Miniconda 4.8.3
- Python 3.7.7
- MindSpore master mindspore的gitee地址
【1】首先使用conda activate mindspore 進入mindspore虛擬環境
【2】再切入mindspore中lenet網絡的train.py所在目錄 D:\gitee\mindspore\model_zoo\official\cv\lenet
【3】執行訓練 python train.py --device-target=CPU
(因為代碼里默認使用的訓練設備為Ascend,需要手動設置 --device_target
為CPU
)
- 問題一 No module named 'mindspore.dataset.vision’
報錯:文件 D:\gitee\mindspore\model_zoo\official\cv\lenet\src\dataset.py
引入模塊import mindspore.dataset.version.c_transforms as CV
錯誤;
原因:查看發現系統 miniconda3的mindspore環境中 在\dataset 和 \version文件夾中還有一層 \transforms
解決:修改dataset.py 文件中模塊引用的位置;
import mindspore.dataset.transforms.vision.c_transforms as CV from mindspore.dataset.transforms.vision import Inter
保存文件重新執行命令 python train.py --device-target=CPU
- 問題二 ImportError: cannot import name ‘set_seed’ from 'mindspore.common’
報錯:文件train.py中導入set_seed模塊出錯
原因: 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)
保存文件重新執行命令 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文件夾
重新執行命令 python train.py --device-target=CPU
- 問題四 RuntimeError: Currently dateset sink mode is not supported when the device target is CPU
原因:數據下沉模式是針對asic芯片做的優化 默認是開啟的,CPU不支持這種模式
解決:改為執行命令 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.
原因:腳本沒有自動下載MNIST數據集,需要自己手動下載
解決:手動下載MNIST數據集MNIST數據集下載地址
MNIST數據目錄結構:
將t10k-labels-idx1-ubyte.gz
和t10k-images-idx3-ubyte.gz
解壓到 問題三新建的Data/test 目錄下
將train-labels-idx1-ubyte.gz
和train-images-idx3-ubyte.gz
解壓到 問題三新建的Data/test 目錄下
重新執行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)
再度執行命令 python train.py --device_target=CPU --dataset_sink_mode=False
, 訓練成功;
【4】驗證准確率: python eval.py --ckpt_path="ckpt/checkpoint_lenet-10_1875.ckpt" --device_target=CPU
============== Starting Testing ============== ============== {'Accuracy': 0.9844751602564102} ==============