摘要:一个Cope 攻城狮用切身实例告诉你: Cope代码体验一时爽,BUG修改花半天。

前言:此文为r0.7-beta的操作实践,为什么我的眼里常含泪水,因为我对踩坑这件事爱得深沉。谨以此文献给和我一样踩坑的小伙伴,纪念踩坑时刻。

↑开局一张图,故事全靠编。

有时候常常问自己:我一个前端开发,没有python基础,居然敢尝试使用深度学习框架?谁给的勇气,是梁静茹吗?有时候也常常暗示自己“技多不压身”,活得像周树人笔下的阿Q一样洒脱,不过现实就像--我是钻井工,钻了一个又一个的井,因为没有坚持,一次又一次地和宝藏擦肩而过最终空手而归;有时候也常常告慰自己:“Just DO IT”,IT这么吃香,不干IT还能干啥?不就是换个地儿搬砖吗?定个小目标,先跑通MindSpore的LeNet模型!

安装

优秀的全场景深度学习框架开源项目,应该提供Docker安装镜像;先康康我的运行环境:

  • Ubuntu 18.04.5 LTS
  • Docker version 18.09.6

这次安装的是CPU版本的,命令:

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官方仓库,一键拥有深度学习框架。当然Fork之后,我们要将代码clone到本地,因为我的码云账号叫hu-qi,所以我要clone的路径是https://gitee.com/hu-qi/mindspore

git clone https://gitee.com/hu-qi/mindspore

因为码云是咱自己的,速度倍儿棒,稍等片刻,美味即将呈现。

翻车现场

ModuleNotFoundError: No module named 'mindspore.dataset.vision'.

习惯了瞎折腾,以为直接运行train.py就能一分钟跑通,还是“too young,too simple”。一波错误的示范,然后就是图中巨大的坑:

幸好前人已经踩过坑了:Windows系统下跑通华为MindSpore的Lenet网络,尽管是Windows系统的,看上去似乎是相同的问题。为了记录本次踩坑历程,我决定施展一下git技能!

checkout踩坑分支

为了印象更加深刻,我决定将分支命名为9-12,以此纪念"9·12踩坑事件"。

cd /home/mindspore
git checkout -b 9-12

然后参照前人的经验教训开始修改本地文件。

修改文件

本次修改的是两个文件--lenet/train.py和lenet/src/dataset.py。

  • lenet/src/dataset.py
# ……
# 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
# ……
# 注释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吧。

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/

数据目录结构:

└─Data├─test│      t10k-images.idx3-ubyte│      t10k-labels.idx1-ubyte│└─traintrain-images.idx3-ubytetrain-labels.idx1-ubyte

既然是linux,二话不说,先来四个wget!

# 切换到Data目录
cd Data
# 下载训练图片
wget
# 下载训练标签
wget
#下载测试图片
wget
# 下载测试标签
wget http://yann.lecun.com/exdb/mnist/t10k-labels-idx1-ubyte.gz

然后又是一波解压操作,来四个gunzip:

gunzip train-images-idx3-ubyte.gz
gunzip train-labels-idx1-ubyte.gz
gunzip t10k-images-idx3-ubyte.gz
gunzip t10k-labels-idx1-ubyte.gz

最后,再来一波移动文件操作压压惊。来四个mv:

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攻城狮的称号,实现代码自由,赢取开源硕果,走向撸码巅峰!咳咳,再来一盘花生米,我还能唠嗑!

训练及验证

新司机再次上路,这回我总能愉快的训练了吧?

cd /home/mindspore/model_zoo/official/cv/lenet
python train.py --device_target=CPU --dataset_sink_mode=False

然后终于看到了胜利的曙光,跑起来了!跑起来了!跑起来了! 看到一行行日志不断涌现,我的眼眶噙满了泪水--“小胡,你在干啥?你丫一前端上班在跑模型,不想干了吗?明天去财务领钱……” 还好隔壁王哥及时解围--“他这是在深度学习,以后不会再把1像素切成2像素了”

接下还需要验证一下:

cd /home/mindspore/model_zoo/official/cv/lenet
python eval.py --ckpt_path="ckpt/checkpoint_lenet-10_1875.ckpt" --device_target=CPU

运行结果:

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

勉强能接受吧,毕竟只整了10个epoch。

上传到远程仓库

尽管我们已经跑通了MindSpore的LeNet,不过我还是希望能把踩的这些坑记录下来,最后再使用一下git技能:

# 切换到本地仓库目录
cd /home/mindspore
# 设置git
git config --global user.email "huqi1008301@163.com"
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这个分支才有的啦。

结语

所谓“一分钟”的体验,大概花了一个小时踩坑了,然后大概花了三个小时来记录。不足之处,期待各位大佬多多指教!

点击关注,第一时间了解华为云新鲜技术~

Copy攻城狮辛酸史:含泪“一分钟”跑通MindSpore的LeNet模型相关推荐

  1. 如何极速极速搭建个人博客?Copy攻城狮用的这一招很优秀!

    摘要:在中国功夫中,"天下武功,无坚不摧,唯快不破",在编程的世界里,如何快速搭建一个属于自己的博客呢?那么 Pagic + Vercel 应该是个不错的选择!接下来,由Copy攻 ...

  2. Copy攻城狮的年度之“战”|回顾2020

    过去的一年,很少在CSDN上发表文章,此处留下了没有技术的眼泪(争取2021年多水一些文章).主要是感觉没啥总结的,因为本身技术实在太水,枉称为"技术人",还是习惯"Co ...

  3. 写给即将/正在找工作的Android攻城狮

    写给即将/正在找工作的Android攻城狮 版权声明:转载必须注明本文转自严振杰的博客:http://blog.yanzhenjie.com 这段时间从北上广深杭不断传来一两个月找不到工作的消息,我一 ...

  4. 网络攻城狮怎么看待TCP/IP协议与UDP协议?

    在互联网中,存在着各种不同层次的协议,它们分别的功能也是不同的.但做为网络攻城狮,对这些协议的使用以及区分是工作的必备技能.那今天以网络攻城狮的角度来告诉大家攻城狮是怎么看待TCP/IP协议与UDP协 ...

  5. python怎么把所有标点符号置空_Python从小白到攻城狮(1)——python环境搭建

    我的微信公众号:代码视界,欢迎关注. Python介绍 Python是Guido van Rossum在1989年圣诞节期间,为了打发无聊的圣诞节而编写的一个编程语言,1991年发布第一版. Pyth ...

  6. 【网易云信招聘啦】216位攻城狮,呼唤7个好基友

    Hi,猿 过年了 年终奖拿了没 老板给加薪没 耿耿于怀的你 是否各种隐忍沮丧 以下代表,你属于哪一个? 猿A 公司是创业公司,还未盈利,为了产品上线,付出很多,能力提升了很多.不过,项目不赚钱,没人在 ...

  7. 216位攻城狮送给程序猿的10个新年礼物

    新的一年来临啦 又到了美好的互送礼物(吃土)的季节~ 如果你的男神是程序猿 如何能让他在代码丛中多看你一眼? 如果你就是程序猿 是不是经常烦恼朋友送的礼物像bug? 现隆重推出 网易云信216位攻城狮 ...

  8. “攻城狮”手把手教你物联网智能生活-内网穿透技术

    "攻城狮"手把手教你物联网智能生活-内网穿透技术 内网穿透技术,即实现外网IP访问内网IP而发展起来的一种计算机技术.在了解内网穿透技术之前,我们需要先了解IP和内网外网的概念. ...

  9. 别人叫我程序猿,我称自己攻城狮。没日没夜写代码,不知何日涨工资?

      别人叫我程序猿, 我称自己攻城狮. 没日没夜写代码, 不知何日涨工资? 转载于:https://www.cnblogs.com/lzkwin/archive/2013/01/27/2879036. ...

最新文章

  1. 腾讯AI Lab视觉计算中心招聘计算机视觉算法实习生
  2. 【Python3网络爬虫开发实战】3-基本库的使用 1.2-处理异常
  3. Fabric架构演变之路
  4. 【AI不惑境】AutoML在深度学习模型设计和优化中有哪些用处?
  5. 大数据学习(3)- 分布式文件系统HDFS
  6. PCI总线原理(二)
  7. 04.Android之动画问题
  8. DOM对象与Jquery对象区别
  9. 为什么你的发行版仍然在使用“过时的”Linux 内核? | Linux 中国
  10. bme280中文技术手册_华为认证数通高级路由交换技术高级工程师 V1.0发布通知
  11. 主成分分析和因子分析_简单易懂!一文理清主成分分析思路
  12. 读《DOOM启示录》随想
  13. 领域驱动设计(DDD)入门概要
  14. the little Redis book
  15. 泰凌微8258入门教程 环境篇②——Telink IDE开发环境搭建
  16. 网宿科技边缘计算之直播应用
  17. 管理系统中计算机应用真题及答案文档,2013年4月管理系统中计算机应用真题及答案...
  18. android 虚拟按键root,(免root)虚拟按键手动修改方法
  19. 小孩拉肚子不能吃什么?
  20. 边缘AI+视频监控,如何助力企业安全生产监管智能化升级?

热门文章

  1. pdf增值税发票如何获取里面的发票编号
  2. 视采网站采集器用户操作手册
  3. 火狐受信任站点设置_火狐浏览器怎么添加信任站点,谷歌浏览器设置信任站点...
  4. 业七业八结合兵法谈下棋
  5. uni-app上传文件并给文件添加水印
  6. 什么是VIP(Virtual IP Address)
  7. JavaScript鼠标拖动绘制方框实现选区
  8. windows安装node及环境配置
  9. Mac/Windows常用软件
  10. 这些Python免费学习资源不可错过,适合有图形化编程基础需要提升能力的你!...