当前位置:网站首页>"A minute" Copy siege lion log 】 【 run MindSpore LeNet model
"A minute" Copy siege lion log 】 【 run MindSpore LeNet model
2022-08-04 06:18:00 【language】
# 含泪"一分钟"跑通MindSpore的LeNet模型
> 前言:此文为r0.7-beta的操作实践,为什么我的眼里常含泪水,因为我对踩坑这件事爱得深沉.谨以此文献给和我一样踩坑的小伙伴,Commemorating the moment of stepping on the pit.
↑开局一张图,故事全靠编.
有时候常常问自己:我一个前端开发,没有python基础,居然敢尝试使用深度学习框架?谁给的勇气,是梁静茹吗?有时候也常常暗示自己“技多不压身”,活得像周树人笔下的阿Q一样洒脱,不过现实就像--我是钻井工,钻了一个又一个的井,因为没有坚持,一次又一次地和宝藏擦肩而过最终空手而归;有时候也常常告慰自己:“Just DO IT”,IT这么吃香,不干IT还能干啥?不就是换个地儿搬砖吗?定个小目标,先跑通MindSpore的LeNet模型!
## 安装
优秀的全场景深度学习框架开源项目,应该提供Docker安装镜像;先康康我的运行环境:
- Ubuntu 18.04.5 LTS
- Docker version 18.09.6
这次安装的是CPU版本的,命令:
```bash
docker pull mindspore/mindspore-cpu:0.7.0-betadocker run -it mindspore/mindspore-cpu:0.7.0-beta /bin/bash
```
一步到“胃”,直接进入到home目录,接下来Copy攻城狮要开始表演粗劣的Copy大法,跑通MindSpore的LeNet模型.
## Fork代码
为啥要Fork代码呢?您指望一个毫无核心技术的Copy攻城狮手写一个深度学习框架MindSpore?代码千千万,Fork第一条!不啰嗦,先fork一下[MindSpore官方仓库](https://gitee.com/mindspore/mindspore),一键拥有深度学习框架.当然Fork之后,我们要将代码clone到本地,因为我的码云账号叫`hu-qi`,所以我要clone的路径是`https://gitee.com/hu-qi/mindspore`.
```bash
git clone https://gitee.com/hu-qi/mindspore
```
因为码云是咱自己的,速度倍儿棒,稍等片刻,美味即将呈现.
## 翻车现场
**ModuleNotFoundError: No module named 'mindspore.dataset.vision'**.
习惯了瞎折腾,以为直接运行`train.py`就能一分钟跑通,还是“too young,too simple”.一波错误的示范,Then there is the huge hole in the picture above:
```bash
cd /home/mindspore/model_zoo/official/cv/lenet/train.py
```
幸好前人已经踩过坑了:[Windows系统下跑通华为MindSpore的Lenet网络](https://zhuanlan.zhihu.com/p/240134719?from=groupmessage),尽管是Windows系统的,看上去似乎是相同的问题.为了记录本次踩坑历程,我决定施展一下`git技能`!
## checkout踩坑分支
为了印象更加深刻,我决定将分支命名为`9-12`,以此纪念"9·12踩坑事件".
```bash
cd /home/mindspore
git checkout -b 9-12
```
然后参照前人的经验教训开始修改本地文件.
## 修改文件
本次修改的是两个文件--`lenet/train.py`和`lenet/src/dataset.py`.
- `lenet/src/dataset.py`
```python
# ……
# line 20新增层级transforms
import mindspore.dataset.transforms.vision.c_transforms as CV
# line 22新增层级transforms
from mindspore.dataset.transforms.vision import Int
# ……
```
- `lenet/train.py`
```python
# ……
# 注释line 32和line34
# from mindspore.common import set_seed
# set_seed(1)
# line 55新增设置is_grad=false
net_loss = nn.SoftmaxCrossEntropyWithLogits(sparse=True, reduction="mean", is_grad=False)
# ……
```
在lenet目录满怀信心的执行命令:`python train.py --device_target=CPU --dataset_sink_mode=False`,结果又是一个错误:**ValueError: The folder ./Data/train does not exist or permission denied!**.
一开始以为是权限的问题,经过一些尝试,发现是没有`Data`目录.那就在`lenet`下新建一个`Data`目录以及子目录`test`和`train`吧.
```bash
cd /home/mindspore/model_zoo/official/cv/lenet
mkdir Data
mkdir Data/test && mkdir Data/train
```
然后依旧满怀信心敲下执行训练的命令:`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数据集: [http://yann.lecun.com/exdb/mnist/](http://yann.lecun.com/exdb/mnist/)
数据目录结构:
```txt
└─Data
├─test
│ t10k-images.idx3-ubyte
│ t10k-labels.idx1-ubyte
│
└─train
train-images.idx3-ubyte
train-labels.idx1-ubyte
```
既然是linux,二话不说,先来四个`wget`!
```bash
# 切换到Data目录
cd Data
# 下载训练图片
wget http://yann.lecun.com/exdb/mnist/train-images-idx3-ubyte.gz
# 下载训练标签
wget http://yann.lecun.com/exdb/mnist/train-labels-idx1-ubyte.gz
#下载测试图片
wget http://yann.lecun.com/exdb/mnist/t10k-images-idx3-ubyte.gz
# 下载测试标签
wget http://yann.lecun.com/exdb/mnist/t10k-labels-idx1-ubyte.gz
```
然后又是一波解压操作,来四个`gunzip`:
```bash
gunzip train-images-idx3-ubyte.gz
gunzip train-labels-idx1-ubyte.gz
gunzip t10k-images-idx3-ubyte.gz
gunzip t10k-labels-idx1-ubyte.gz
```
最后,Another wave of moving files.来四个`mv`:
```bash
mv train-images-idx3-ubyte ./train
mv train-labels-idx1-ubyte ./train
mv t10k-images-idx3-ubyte ./test/
mv t10k-labels-idx1-ubyte ./test/
```
此时此刻,感受到不懂代码真吃亏,明明几行代码就解决了,我要这么多套“切克闹”才能获取到数据集,我一定向明明学习,争取早日摆脱**Copy攻城狮**的称号,实现**代码自由**,赢取**开源硕果**,走向**撸码巅峰**!咳咳,再来一盘花生米,我还能唠嗑!
## 训练及验证
新司机再次上路,这回我总能愉快的训练了吧?
```bash
cd /home/mindspore/model_zoo/official/cv/lenet
python train.py --device_target=CPU --dataset_sink_mode=False
```
然后终于看到了胜利的曙光,跑起来了!跑起来了!跑起来了!
看到一行行日志不断涌现,我的眼眶噙满了泪水--“小胡,你在干啥?你丫一前端上班在跑模型,不想干了吗?明天去财务领钱……”
还好隔壁王哥及时解围--“他这是在深度学习,以后不会再把1像素切成2像素了”
接下还需要验证一下:
```bash
cd /home/mindspore/model_zoo/official/cv/lenet
python eval.py --ckpt_path="ckpt/checkpoint_lenet-10_1875.ckpt" --device_target=CPU
```
运行结果:
```log
============== Starting Testing ==============
============== {'Accuracy': 0.9847756410256411} ==============
```
勉强能接受吧,毕竟只整了10个epoch.
## 上传到远程仓库
尽管我们已经跑通了MindSpore的LeNet,不过我还是希望能把踩的这些坑记录下来,最后再使用一下`git`技能:
```bash
# 切换到本地仓库目录
cd /home/mindspore
# 设置git
git config --global user.email "[email protected]"
git config --global user.name "hu-qi"
# 查看本地分支,确保我的9-12还在
git branch
# 查看有哪些改变
git status
# 新增改变
git add .
# 提交改变到缓存仓库
git commit -m 'finish LeNet'
# 推送分支到远程(按照提示登录)
git push origin 9-12
```
一顿操作猛如虎,一看代码原地杵,当然要切换到`9-12`这个分支才有的啦
## 结语
所谓“一分钟”的体验,大概花了一个小时踩坑了,然后大概花了三个小时来记录.不足之处,期待各位大佬多多指教!
边栏推荐
- 【论文阅读】Mining Cross-Image Semantics for Weakly Supervised Semantic Segmentation
- Briefly say Q-Q map; stats.probplot (QQ map)
- 中国联通、欧莱雅和钉钉都在争相打造的秘密武器?虚拟IP未来还有怎样的可能
- Usage of RecyclerView
- 双向LSTM
- tensorRT5.15 使用中的注意点
- 深度学习,“粮草”先行--浅谈数据集获取之道
- JPEG2jpg
- 度量学习(Metric learning)—— 基于分类损失函数(softmax、交叉熵、cosface、arcface)
- 【论文阅读】SPANET: SPATIAL PYRAMID ATTENTION NETWORK FOR ENHANCED IMAGE RECOGNITION
猜你喜欢
[Deep Learning 21-Day Learning Challenge] 3. Use a self-made dataset - Convolutional Neural Network (CNN) Weather Recognition
YOLOV5 V6.1 详细训练方法
YOLOV4流程图(方便理解)
The pipeline mechanism in sklearn
MNIST手写数字识别 —— 图像分析法实现二分类
线性回归02---波士顿房价预测
Th in thymeleaf: href use notes
PyTorch
【深度学习21天学习挑战赛】3、使用自制数据集——卷积神经网络(CNN)天气识别
Deep Adversarial Decomposition: A Unified Framework for Separating Superimposed Images
随机推荐
[CV-Learning] Linear Classifier (SVM Basics)
Comparison of oracle's number and postgresql's numeric
Install dlib step pit record, error: WARNING: pip is configured with locations that require TLS/SSL
【论文阅读】Anchor-Free Person Search
2020-10-29
[Introduction to go language] 12. Pointer
Th in thymeleaf: href use notes
动手学深度学习__张量
Halcon缺陷检测
Android foundation [Super detailed android storage method analysis (SharedPreferences, SQLite database storage)]
语音驱动嘴型与面部动画生成的现状和趋势
度量学习(Metric learning、损失函数、triplet、三元组损失、fastreid)
【CV-Learning】Image Classification
AIDL communication between two APPs
(导航页)OpenStack-M版-双节点手工搭建-附B站视频
深度学习理论——过拟合、欠拟合、正则化、优化器
深度学习,“粮草”先行--浅谈数据集获取之道
Pytorch语义分割理解
yolov3 data reading (2)
MAE 论文《Masked Autoencoders Are Scalable Vision Learners》