项目背景
Datawhale 联合趋动云给学习者提供免费算力,进行深度学习相关的学习,除了带学习者学习者熟悉趋动云外,还提供猫狗识别实践项目、创建聊天 GPT 和部署 stable-diffusion 的三个任务的学习资料。本笔记为任务一笔记。
学习任务
任务一:
1. 熟悉趋动云平台
2. 部署猫狗识别实践项目
3. 提交任务打卡
趋动云平台部署
按照 Datawhale 的学习资料完成部署步骤便可得到的项目空间。
首先根据 Datawhale 提供的注册链接进行,填入 用户名、 手机号和密码注册即可,可以得到168.00 的算力点。
完成注册,部署所需要的项目环境和数据。(今天比较着急,过程中也比较顺利,所以没有过程截图,这里使用官方学习文档的截图)
第一步,点击创建项目
然后填入项目名称和项目描述(可自主填写)
接下来在这个页面选择添加官方镜像,选择 TensorFlow 2.x 框架,可以直接按下面选择 TensorFlow 2.10.1。
点击 确认 后,继续在页面 添加指定数据。按下方显示,在搜索框搜索 dog,便可找到需要的数据集,选择用户名为小助手的数据集(跟下方图不一样,用户名改了,但数据集大小是一样的)。
到这里就完成了这部分创建填写了,其余无需填写,点击右下角 创建 ,系统弹出 上传代码 的提示,单击 暂不上传,项目创建成功。
进入创建好的项目页面后,点击上传代码文件即可(这里不提供,大家需要可以去支持一下官方的学习项目,这也是对原作者的努力工作的肯定),上传键如下所示
点击后,找到自己需要上传的文件即可。(需要注意的是官方文件是压缩包,最好下载后解压,然后直接上传要用的文件就可,上传压缩包的话,记得在终端解压)
上传后,运行右上方运行代码进入开放环境,初始化可以参考下面图片中的选项。这个项目使用B1.small就可以了,但你也可以选择B1.medium之类(我选的medium),但注意算力消耗,免费算力有限。
点击 确定 后,就可以了,后面系统会根据初始化开启环境,需要等待 5 到 10 分钟。环境开启运行情况可以看左下角这个地方。
主要需要注意的是:
1. 镜像需要含 TensorFlow 2.x 框架 (代码使用的tensorflow框架);
2. 绑定数据集时选择公开数据集,合理利用搜索框,选择用户名为小助手的数据集。
猫狗识别项目实践
这里第一步就有一个小问题需要注意。按官方步骤的话,部署好环境后,是点击 JupyterLab 进入项目实践的,但是我这里 JupyterLab 是灰色的,不可点击,但我的环境确实部署成功的,网页终端非灰色,所以我直接尝试从 网页终端 进入了,是没有问题的。当点击 网页终端 后,旁边是有JupyterLab 窗口的(环境配置部署不出错的话),是可以直接点进去,再回到上一个页面JupyterLab 也会亮起来。
进入调试环境后,可以直接在终端尝试运行导入的python文件,试试效果。运行代码如下:
python $GEMINI_RUN/DogsVsCats.py --num_epochs 5 --data_dir $GEMINI_DATA_IN1/DogsVsCats/ --train_dir $GEMINI_DATA_OUT
在这个地方,我自己实践时不小心把 python 写成了 bash,因为上一个学习是把这一部分放可执行文件的,会更适合做调参,所以我这里也把这部分写进了 train_dogvscat.sh 文件中,首先使用vim创建空的train_dogvscat.sh 文件,直接输入
vim ./train_dogvscat.sh
进入后,点击 "i" 进入插入模型,输入
CUDA_VISIBLE_DEVICES=0 python ./DogsVsCats.py \
--num_epochs 5 \
--data_dir $GEMINI_DATA_IN1/DogsVsCats/ \
--train_dir $GEMINI_DATA_OUT
然后输入“Esc” ,再输入 “:wq" 保存并退出。之后在终端输入 bash train_dogvscat.sh 便可以运行了。
这一部分值得关注一个变量问题,比如用到的 $GEMINI_DATA_IN1 和 $GEMINI_DATA_OUT。这里显然可以直接输入目录,但变量让目录书写变得更简单,在终端打开的时候便有介绍,是一个直接关注的点。终端介绍界面如下:
成功运行代码,发现准确不高。
一方面是因为数据没有打乱,打乱代码被注释掉了,这个官方也做了说明,删掉注释符后,准确率提高到 0.833 左右。
这是官方给的优化,所以这里就不做说明(可以去官方网站看看)。这里主要说明一下我自己做的调整。
优化尝试
由于我看官方代码中使用的神经网络已经比较多层了,但学习率比较大,所以我主要尝试减小学习率。值得先说的是,虽然官方前面给的训练参数传入的只有num_epochs,数据目录和输出目录,但实际上从官方代码(下图)看出,还有一些参数可输入调整,包括我上面说到的学习率。
这里学习率的 type 是我加入的,因为一开始在 train_dogvscat.sh 文件中加入这个参数的时候,一直报错(不知原因,但加入 type 后确实能运行了),修改的 bash 如下:
CUDA_VISIBLE_DEVICES=0 python ./DogsVsCats.py \
--num_epochs 20 \
--learning_rate 5e-4 \
--data_dir $GEMINI_DATA_IN1/DogsVsCats/ \
--train_dir $GEMINI_DATA_OUT
因为学习率减少了,所以我相对把 epoch 也增大了( 原来epoch也比较小 )。最终得到准确率为0.9136,显著提高,作为对比,可以看看下图学习率为 5e-3(一开始是想输5e-4,输错了)的结果,结合官方用的 0.001 的学习率,可以明显看到准确率的变化。从 0.5 到 0.8 到 0.9。
学习率为 5e-3 的结果跟数据没打乱,学习率为0.001的结果差不多。
(时间原因,这次尝试不多,但跟之前的博客差不多,模型啊,参数都是可以多次尝试调优的)
后面离线训练部分来不及写啦,之后有时间补充。