训练总结
非常有幸参加了MindSpore第四期两日集训营的学习,学习的第一大部分MindSpore0.7版本的特性介绍以及Lenet训练实践。正好通过做作业实践了一下:
作业:使用cpu完成lenet训练
上次第三期学习的时候,已经完成过一次了,本来以为很简单,没想到这次竟然又费了很多周折。
首先没有合适的系统资源。自己的本机是mac,一台云服务器是centos,上次完成作业的那台ubuntu,一段时间没有用,进去发现竟然conda环境没有了,好像全被删除了似的。(后来才发现是进错了服务器,所以后面又用这台ubuntu机器补上了cpu完成lenet的训练)
于是把目光转向了昇腾,准备在昇腾系统里跑一遍lenet。首先把lenet代码打包,上传,但是在notebook里竟然看不见。反复查看了好多遍,终于在一个隐藏目录里看见了lenet.zip这个文件。
/home/ma-user/mindspore_image_classification/.ipynb_checkpoints
现在是能看见这个文件,在终端里也解压开了,问题是notebook上看不见啊
从notebook上使用命令可以对那些文件进行操作,但是看不见,不直观。
看到modelarts的说明,说除了notebook的操作,其它操作都是默认不会同步到obs的,我理解这就是看不见的原因。另外看到可以直接从本地上传文件到notebook的obs里。
将示例代码留档:
上传单个文件
from modelarts.session import Session
session = Session()
session.upload_data(bucket_path="/bucket-name/dir1/", path="/home/user/sdk/sdk.txt")
上传多个文件
from modelarts.session import Session
session = Session()
local_file_list = ["/home/user/sdk1.txt", "/opt/sdk2.txt", "/etc/sdk3.txt"]
session.upload_data(bucket_path="/bucket-name/dir1/", path=local_file_list)
比如我想把几个mnist文件上传上去,就要写:
from modelarts.session import Session
session = Session()
local_file_list = ["/Users/skywalk/Downloads/t10k-labels-idx1-ubyte.gz","/Users/skywalk/Downloads/t10k-images-idx3-ubyte.gz", "/Users/skywalk/Downloads/train-labels-idx1-ubyte.gz", "/Users/skywalk/Downloads/train-images-idx3-ubyte.gz"]
session.upload_data(bucket_path="./dataset/", path=local_file_list)
但是很遗憾,好像昇腾系统的modelarts notebook里有问题,modelarts SDK装又装不上,没法进行上面的操作。只好手工在notebook里上传,再想办法处理。
最终的操作方法是:先在notebook里上传上去,然后选择obs同步,然后就能在notebook里看见了。在notebook里使用系统命令进行解压缩,创建目录等操作。
!mkdir dataset
!mkdir dataset/train
!mkdir dataset/test
!gzip -d *.gz
!mv train-images-idx3-ubyte dataset/train/
!mv train-labels-idx1-ubyte dataset/train/
!mv t10* dataset/test/
#解压lenet源代码,该代码可以在MindSpore-model_zoo里找到
!unzip lenet.zip
执行训练:
!python lenet/train.py --device_target=Ascend --data_path=dataset
执行测试:
!python lenet/eval.py --device_target=Ascend --data_path=dataset --ckpt_path=checkpoint_lenet_2-5_1875.ckpt
#这里的checkpoint_lenet_2-5_1875.ckpt就是前面训练的参数存盘文件
测试结果:
[WARNING] PIPELINE(1555,python):2020-09-12-09:31:03.624.351 [mindspore/ccsrc/utils/utils.h:290] ChangeFileMode] Change file `./ms_output_0eval.pb` to mode 700 fail.
[EVENT] TDT(1555,python):2020-09-12-09:31:03.629.609 [tdt/host/../common/src/log.cpp:149]"HostSendPool: {blockSize: 3072K, totalNum: 4, freeNum: 4}" "HostRecvPool: {blockSize: 3072K, totalNum: 1, freeNum: 1}" "DeviceRecvPool: " "HostCtrlPool: {SendPool: 4, FreePool: 4}, {RecvPool: 1, FreePool: 1}",[tdt/host/../common/src/memory_pool.cpp:688:GetHostPoolStatus]1566
============== {'Accuracy': 0.9834735576923077} ==============
[EVENT] TDT(1555,python):2020-09-12-09:31:04.629.748 [tdt/host/../common/src/log.cpp:149]"HostSendPool: {blockSize: 3072K, totalNum: 4, freeNum: 4}" "HostRecvPool: {blockSize: 3072K, totalNum: 1, freeNum: 1}" "DeviceRecvPool: " "HostCtrlPool: {SendPool: 4, FreePool: 4}, {RecvPool: 1, FreePool: 1}",[tdt/host/../common/src/memory_pool.cpp:688:GetHostPoolStatus]1566
不知道为什么那么多的报错信息。但是至少训练成功了!
训练有感
这是第二次用昇腾系统进行训练,第一次是用modelarts系统提供的那个花分类的程序,当时直接调用demo文件就行,而这次是从头到位,比如上传文件,解压文件,生成数据集目录等,都是自己动手做的,所以还是相当有自豪感的。昇腾系统必须用obs桶,如果想省略操作桶的步骤,那就要像上面那样在notebook里进行操作。关键是这不单单是notebook操作的问题,而是刚开始上传进去,notebook里是看不见的,要obs同步一下才能看见。
不知道为什么,在昇腾系统里不能用moxing和modelarts,导致用起来不顺手。(后来测试了一下,moxing是可以用的,系统自带,而modelarts SDK就没有自带,而且我也没有装成功)
后来又在cpu模式下测试了一遍,对,就是前面以为conda都弄丢了的那台ubuntu,不过用CPU训练的速度比昇腾系统慢多了。
基于概率数据增强MindSpore策略
概率算子,随机选择其中一批执行。这个思路挺不错的。比如举个例子:
RandomSelectSubpolicy(policy) 用户可以预置策略(Policy),每次随机选择一个子策略(SubPolicy)组合,同一子策略中由若干个顺序执行的图像增强操作组成,每个操作与两个参数关联:1) 执行操作的概率 2)执行操作的幅度;对于一个batch中的每张图像,随机选择子策略来变换图像。
policy = [
[(c_vision.RandomRotation((45, 45)), 0.5), (c_vision.RandomVerticalFlip(), 1.0), (c_vision.RandomColorAdjust(), 0.8)],
[(c_vision.RandomRotation((90, 90)), 1), (c_vision.RandomColorAdjust(), 0.2)]
]
ds = ds.map(operations=c_vision.RandomSelectSubpolicy(policy), input_columns=["image"])
示例中包括2条子策略,其中子策略1中包含RandomRotation、RandomVerticalFlip、RandomColorAdjust3个操作,概率分别为0.5、1.0、0.8;子策略2中包含RandomRotation和RandomColorAdjust,概率分别为1.0、2.0。
总之感觉是很好的东西。
这回的集训营,培训内容要比上次丰富一些,而作业比上回少一半,我想可能也是想让大多数同学能够结业的缘故吧。
MindSpore官方资料
GitHub:https://github.com/mindspore-ai/mindspore
Gitee:https://gitee.com/mindspore/mindspore
官方QQ群: 871543426